Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Run-time error 1004 / 25 сообщений из 30, страница 1 из 2
13.11.2012, 16:33
    #38036585
Golfstream84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Добрый день, уважаемые коллеги,

Подскажите, пож-та, запускаю макрос, такая ошибка: "Run-time error 1004"
И в коде выделяется желтым следующий код:
iLastRowBaza = BazaSht.Cells(Rows.Count, 3).End(xlUp).Row

Помогите, плиз!
...
Рейтинг: 0 / 0
13.11.2012, 16:39
    #38036596
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
конфликт типов?
...
Рейтинг: 0 / 0
13.11.2012, 16:40
    #38036599
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
А что, текст ошибки слабо дать? И код предшестующий нам самим придумать?
...
Рейтинг: 0 / 0
13.11.2012, 16:45
    #38036608
Golfstream84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Полный текст ошибки:
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
...
Рейтинг: 0 / 0
13.11.2012, 17:07
    #38036673
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
А теперь учимся правильно оформлять код

Код: 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.
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
...
Рейтинг: 0 / 0
13.11.2012, 17:14
    #38036688
Golfstream84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Да, ок.

А в чем ошибка-то?
...
Рейтинг: 0 / 0
13.11.2012, 17:19
    #38036699
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Навскидку непонятно, давайте-ка сам файл, чтобы можно во время ошибки посмотреть значения переменных
...
Рейтинг: 0 / 0
13.11.2012, 17:50
    #38036795
Golfstream84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Высылаю файл с макросом
...
Рейтинг: 0 / 0
13.11.2012, 17:59
    #38036809
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
---------------------------
Объединение таблиц
---------------------------
Информация собрана из 2 файлов
Скопировано 2 таблиц
---------------------------
ОК
---------------------------

Никакой ошибки не выдало
...
Рейтинг: 0 / 0
13.11.2012, 18:05
    #38036820
Golfstream84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
А у меня почему-то ошибка выходит.....
...
Рейтинг: 0 / 0
13.11.2012, 18:32
    #38036836
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Попробуйте через UsedRange искать конец данных
...
Рейтинг: 0 / 0
13.11.2012, 20:16
    #38036979
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
    With Application
...
            With .Workbooks.Open _
...
                With .Worksheets("Example")
...
                       iLastRowBaza = BazaSht.Cells(Rows.Count, 3).End(xlUp).Row
...

Скажите, ROWS здесь какого объекта? (Особенно, если вы в процессе работы макроса - перешли к другому листу, мышкой, например)
...
Рейтинг: 0 / 0
14.11.2012, 00:24
    #38037227
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
AndreTMСкажите, ROWS здесь какого объекта?А какая разница? Фактически он сюда константу пишет 65535 для экселя до 2007 и скокататам - после.
...
Рейтинг: 0 / 0
14.11.2012, 09:37
    #38037408
Golfstream84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Shocker.ProAndreTMСкажите, ROWS здесь какого объекта?А какая разница? Фактически он сюда константу пишет 65535 для экселя до 2007 и скокататам - после.

Может это ошибка из-за несоответствия екселей 2003 и 2007?
...
Рейтинг: 0 / 0
14.11.2012, 09:45
    #38037413
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Попробуй вместо Rows.Count просто вписать число, за которыми данных точно не будет. Например 10000.
...
Рейтинг: 0 / 0
14.11.2012, 17:25
    #38038460
Golfstream84
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Спасибо, вроде помогло!
Только число 60000 написал, все ок,
А 1000000 написал - опять ошибка...
...
Рейтинг: 0 / 0
14.11.2012, 18:23
    #38038574
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Golfstream84,

Ошибка возникает потому, что строк получается больше, чем есть на листе. Т.е. Вы собираете данные в книгу .xls. Открыли файл .xlsx. Объект Rows в данном случае принадлежит активному листу(если иное не указано). А на активном листе строк более 65534. Т.е. естрока:
Код: vbnet
1.
BazaSht.Cells(Rows.Count, 3).End(xlUp).Row


получается такой:
Код: vbnet
1.
BazaSht.Cells(1048576, 3).End(xlUp).Row


вот и получается, что Вы ссылаетесь на ячейку, которой нет и быть не может, т.к. в BazaSht всего 65534 строк. Вот и ошибка...
Чтобы её избежать достаточно записать так:
Код: vbnet
1.
BazaSht.Cells(BazaSht.Rows.Count, 3).End(xlUp).Row
...
Рейтинг: 0 / 0
15.11.2012, 09:14
    #38039167
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
65536 строк :)
...
Рейтинг: 0 / 0
15.11.2012, 10:36
    #38039281
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
PlanB65536 строк :)Спасибо. очепятался...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
22.02.2014, 20:35
    #38569587
TanyaArt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
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.
Sub Запись_в_ACAD()
'
' Запись_в_ACAD Макрос
' Макрос записан 26.02.2003 (Reanimator)
'

'
    Columns("A:D").Select
    Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    Columns("A:A").Select
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.ColumnWidth = 8
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Selection.ColumnWidth = 6
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Columns("C:E").Select
    Selection.ColumnWidth = 15
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Range("A1").Select
    ChDir "C:\"
    ActiveWorkbook.SaveAs Filename:="C:\Topoplan.prn", FileFormat:= _
        xlTextPrinter, CreateBackup:=False
End Sub


Модератор: Учимся использовать тэги оформления кода - FAQ
Подскажите в чем здесь ошибка, выдает "ошибка runtime error 1004"
...
Рейтинг: 0 / 0
22.02.2014, 20:43
    #38569590
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
у меня не выдает
...
Рейтинг: 0 / 0
22.02.2014, 21:02
    #38569595
TanyaArt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Shocker.Pro,

ActiveWorkbook.SaveAs Filename:="C:\Topoplan.prn", FileFormat:= _
xlTextPrinter, CreateBackup:=False
выделяет эту строку желтым...
...
Рейтинг: 0 / 0
22.02.2014, 21:10
    #38569598
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
Надо писать ACAB, а не ACAD :)
...
Рейтинг: 0 / 0
22.02.2014, 21:27
    #38569603
TanyaArt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
так я макросы делаю для автокада:)
...
Рейтинг: 0 / 0
22.02.2014, 21:47
    #38569612
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Run-time error 1004
TanyaArtShocker.Pro,

ActiveWorkbook.SaveAs Filename:="C:\Topoplan.prn", FileFormat:= _
xlTextPrinter, CreateBackup:=False
выделяет эту строку желтым...а если ThisWorkbook.SaveAs..... ?

и текст ошибки какой?
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Run-time error 1004 / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]