|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Добрый день, уважаемые коллеги, Подскажите, пож-та, запускаю макрос, такая ошибка: "Run-time error 1004" И в коде выделяется желтым следующий код: iLastRowBaza = BazaSht.Cells(Rows.Count, 3).End(xlUp).Row Помогите, плиз! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 16:33 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
конфликт типов? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 16:39 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
А что, текст ошибки слабо дать? И код предшестующий нам самим придумать? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 16:40 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Полный текст ошибки: Run-time error 1004: Application-defined or object-defined error. Полный год: Option Explicit Sub CombineTables() Dim BazaWb As Workbook 'текущая книга (общий файл) Dim BazaSht As Worksheet 'лист База покупателей в общем файле Dim iTempFileName As String 'имя по-очерёдно открываемого файла Dim iPath As String 'путь к папке, где лежат все файлы Dim iLastRowBaza As Long 'последняя заполненная строка в общем файле в столбце A Dim iLastRowTempWb As Long 'последняя заполненная строка в по-очерёдно открываемом файле в столбце A Dim iLastColTempWb 'последний столбец с инфо в по-очерёдно открываемом файле Dim iNumFiles As Long 'количество открываемых файлов Dim IsHeader As Boolean 'скопирована ли шапка таблицы Dim NumberRng As Range 'ячейка с Number Dim firstAddress As String Dim n As Long 'счётчик Dim iLastRowTbl As Long 'номер последний строки в текущей таблице Dim iTablesCnt As Long 'количество скопированных таблиц With Application .ScreenUpdating = False .DisplayAlerts = False .Calculation = xlManual Set BazaWb = ThisWorkbook Set BazaSht = BazaWb.Sheets.Add iPath = BazaWb.Path & "\" iTempFileName = Dir(iPath & "*.xls") Do While iTempFileName <> "" If iTempFileName = BazaWb.Name Then GoTo iNext: With .Workbooks.Open _ (Filename:=iPath & iTempFileName, UpdateLinks:=False, ReadOnly:=True) If Not IsShtPresent("Example") Then Application.ScreenUpdating = True MsgBox "Листа с названием ""Example"" в активной книге нет! ", 48, "Ошибка" Exit Sub End If iNumFiles = iNumFiles + 1 'Рабочая книга не должна быть защищена паролем With .Worksheets("Example") .UsedRange.EntireRow.Hidden = False .UsedRange.RowHeight = 12.75 'ищем ячейку с надписью Number Set NumberRng = .Columns(2).Find(What:="Number", LookIn:=xlFormulas, LookAt:=xlWhole) 'номер последней заполенной строки в столбце С iLastRowTempWb = .Cells(Rows.Count, 3).End(xlUp).Row iLastColTempWb = .UsedRange.Columns.Count If Not NumberRng Is Nothing Then If Range(NumberRng.Address).MergeCells = True Then Range(NumberRng.Address).UnMerge firstAddress = NumberRng.Address Do If Not IsHeader Then 'если копируем первый раз, то копируем таблицу с шапкой 'узнаём сколько строк в текущей таблице будем копировать For n = NumberRng.Offset(2, 1).Row To iLastRowTempWb + 1 If Cells(n, 3) = "" Then iLastRowTbl = n - 1 Exit For End If Next n iLastRowBaza = BazaSht.Cells(Rows.Count, 3).End(xlUp).Row If iLastRowBaza > 1 Then iLastRowBaza = iLastRowBaza + 1 .Range(.Cells(1, 1), .Cells(iLastRowTbl, iLastColTempWb)).Copy Destination:=BazaSht.Cells(iLastRowBaza, 1) IsHeader = True iTablesCnt = iTablesCnt + 1 Else 'для всех последующих копирований - без шапки 'узнаём сколько строк в текущей таблице будем копировать For n = NumberRng.Offset(2, 1).Row To iLastRowTempWb + 1 If Cells(n, 3) = "" Then iLastRowTbl = n - 1 Exit For End If Next n iLastRowBaza = BazaSht.Cells(Rows.Count, 3).End(xlUp).Row + 1 .Range(.Cells(NumberRng.Offset(2, 0).Row, 2), .Cells(iLastRowTbl, iLastColTempWb)).Copy Destination:=BazaSht.Cells(iLastRowBaza, 2) iTablesCnt = iTablesCnt + 1 End If Set NumberRng = .Columns(2).FindNext(NumberRng) If Range(NumberRng.Address).MergeCells = True Then Range(NumberRng.Address).UnMerge Loop While Not NumberRng Is Nothing And NumberRng.Address <> firstAddress Else Application.ScreenUpdating = True MsgBox "Неправильная шапка таблицы! Не найдена ячейку ""Number"" в столбце B", vbExclamation, "Ошибка" Exit Sub End If End With .Close saveChanges:=False End With iNext: iTempFileName = Dir Loop Range("B2:B3").Merge Columns("B:D").AutoFit .Calculation = xlAutomatic .DisplayAlerts = True .ScreenUpdating = True End With MsgBox "Информация собрана из " & iNumFiles & " файлов" & vbCr & _ "Скопировано " & iTablesCnt & " таблиц", vbInformation, "Объединение таблиц" End Sub Function IsShtPresent(iShtName As String) As Boolean 'проверяем существование листа в книге Dim iShtTest As Worksheet On Error Resume Next Set iShtTest = ActiveWorkbook.Sheets(iShtName) If iShtTest Is Nothing Then IsShtPresent = False Else IsShtPresent = True End If End Function ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 16:45 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
А теперь учимся правильно оформлять код Код: 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. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 17:07 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Да, ок. А в чем ошибка-то? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 17:14 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Навскидку непонятно, давайте-ка сам файл, чтобы можно во время ошибки посмотреть значения переменных ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 17:19 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Высылаю файл с макросом ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 17:50 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
--------------------------- Объединение таблиц --------------------------- Информация собрана из 2 файлов Скопировано 2 таблиц --------------------------- ОК --------------------------- Никакой ошибки не выдало ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 17:59 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
А у меня почему-то ошибка выходит..... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 18:05 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Попробуйте через UsedRange искать конец данных ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 18:32 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Скажите, ROWS здесь какого объекта? (Особенно, если вы в процессе работы макроса - перешли к другому листу, мышкой, например) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 20:16 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
AndreTMСкажите, ROWS здесь какого объекта?А какая разница? Фактически он сюда константу пишет 65535 для экселя до 2007 и скокататам - после. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 00:24 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Shocker.ProAndreTMСкажите, ROWS здесь какого объекта?А какая разница? Фактически он сюда константу пишет 65535 для экселя до 2007 и скокататам - после. Может это ошибка из-за несоответствия екселей 2003 и 2007? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 09:37 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Попробуй вместо Rows.Count просто вписать число, за которыми данных точно не будет. Например 10000. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 09:45 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Спасибо, вроде помогло! Только число 60000 написал, все ок, А 1000000 написал - опять ошибка... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 17:25 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Golfstream84, Ошибка возникает потому, что строк получается больше, чем есть на листе. Т.е. Вы собираете данные в книгу .xls. Открыли файл .xlsx. Объект Rows в данном случае принадлежит активному листу(если иное не указано). А на активном листе строк более 65534. Т.е. естрока: Код: vbnet 1.
получается такой: Код: vbnet 1.
вот и получается, что Вы ссылаетесь на ячейку, которой нет и быть не может, т.к. в BazaSht всего 65534 строк. Вот и ошибка... Чтобы её избежать достаточно записать так: Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 18:23 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
65536 строк :) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2012, 09:14 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
PlanB65536 строк :)Спасибо. очепятался... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2012, 10:36 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Shocker.Pro, Код: 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.
Модератор: Учимся использовать тэги оформления кода - FAQ Подскажите в чем здесь ошибка, выдает "ошибка runtime error 1004" ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2014, 20:35 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
у меня не выдает ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2014, 20:43 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Shocker.Pro, ActiveWorkbook.SaveAs Filename:="C:\Topoplan.prn", FileFormat:= _ xlTextPrinter, CreateBackup:=False выделяет эту строку желтым... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2014, 21:02 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
Надо писать ACAB, а не ACAD :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2014, 21:10 |
|
Run-time error 1004
|
|||
---|---|---|---|
#18+
так я макросы делаю для автокада:) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.02.2014, 21:27 |
|
|
start [/forum/topic.php?fid=61&msg=38036795&tid=2174219]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 150ms |
0 / 0 |