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

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

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

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

Никакой ошибки не выдало
...
Рейтинг: 0 / 0
Run-time error 1004
    #38036820
Golfstream84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А у меня почему-то ошибка выходит.....
...
Рейтинг: 0 / 0
Run-time error 1004
    #38036836
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте через UsedRange искать конец данных
...
Рейтинг: 0 / 0
Run-time error 1004
    #38036979
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Run-time error 1004
    #38037227
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMСкажите, ROWS здесь какого объекта?А какая разница? Фактически он сюда константу пишет 65535 для экселя до 2007 и скокататам - после.
...
Рейтинг: 0 / 0
Run-time error 1004
    #38037408
Golfstream84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProAndreTMСкажите, ROWS здесь какого объекта?А какая разница? Фактически он сюда константу пишет 65535 для экселя до 2007 и скокататам - после.

Может это ошибка из-за несоответствия екселей 2003 и 2007?
...
Рейтинг: 0 / 0
Run-time error 1004
    #38037413
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй вместо Rows.Count просто вписать число, за которыми данных точно не будет. Например 10000.
...
Рейтинг: 0 / 0
Run-time error 1004
    #38038460
Golfstream84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, вроде помогло!
Только число 60000 написал, все ок,
А 1000000 написал - опять ошибка...
...
Рейтинг: 0 / 0
Run-time error 1004
    #38038574
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Run-time error 1004
    #38039167
PlanB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
65536 строк :)
...
Рейтинг: 0 / 0
Run-time error 1004
    #38039281
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PlanB65536 строк :)Спасибо. очепятался...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Run-time error 1004
    #38569587
TanyaArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Run-time error 1004
    #38569590
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня не выдает
...
Рейтинг: 0 / 0
Run-time error 1004
    #38569595
TanyaArt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

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

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

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


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