Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Процедура не обрабатывает документы из директории. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Процедура не обрабатывает документы из директории. (Макросы/Sub)
Процедура не обрабатывает документы из директории.
ant6729 Дата: Четверг, 22.02.2018, 15:22 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Всем добрый день!

Когда использую цикл для получения инфо из файлов в один, то код

[vba]
Код
Sub Dailyreport()

    Workbooks.Add
    Dim wb_ As Workbook
    Application.ScreenUpdating = False
    fp_ = "D:\4\"
    fn_ = Dir(fp_ & "*.xls*", vbNormal)
    On Error Resume Next
    Do While fn_ <> ""
    Set wb_ = GetObject(fp_ & fn_)
        
' ActiveWindow.DisplayWorkbookTabs = True
' ActiveWindow.TabRatio = 0.5

    With wb_.Sheets("Sheet1")
        lr1 = Cells(Rows.Count, 2).End(xlUp).Row + 1
        lr2 = .Cells(Rows.Count, 2).End(xlUp).Row
        .Range("A3:J3").Resize(lr2).Copy Cells(lr1, 1)
    End With
        wb_.Close False
        lr_ = Empty
        fn_ = Dir()
    Loop
    
End Sub
[/vba]

Не открывает эти документы.

Если создать другие файлы в этой директории и их обработать - все происходит.

С этими приложенными документами - нет.
Ума не приложу, в чем дело.
Прошу подсказать, что не так.

Понятно, что эти файлы 2003-2007... но что это меняет...
К сообщению приложен файл: 4134316.xls (29.0 Kb) · 6751456.xls (33.5 Kb)


Сообщение отредактировал ant6729 - Четверг, 22.02.2018, 15:26
 
Ответить
СообщениеВсем добрый день!

Когда использую цикл для получения инфо из файлов в один, то код

[vba]
Код
Sub Dailyreport()

    Workbooks.Add
    Dim wb_ As Workbook
    Application.ScreenUpdating = False
    fp_ = "D:\4\"
    fn_ = Dir(fp_ & "*.xls*", vbNormal)
    On Error Resume Next
    Do While fn_ <> ""
    Set wb_ = GetObject(fp_ & fn_)
        
' ActiveWindow.DisplayWorkbookTabs = True
' ActiveWindow.TabRatio = 0.5

    With wb_.Sheets("Sheet1")
        lr1 = Cells(Rows.Count, 2).End(xlUp).Row + 1
        lr2 = .Cells(Rows.Count, 2).End(xlUp).Row
        .Range("A3:J3").Resize(lr2).Copy Cells(lr1, 1)
    End With
        wb_.Close False
        lr_ = Empty
        fn_ = Dir()
    Loop
    
End Sub
[/vba]

Не открывает эти документы.

Если создать другие файлы в этой директории и их обработать - все происходит.

С этими приложенными документами - нет.
Ума не приложу, в чем дело.
Прошу подсказать, что не так.

Понятно, что эти файлы 2003-2007... но что это меняет...

Автор - ant6729
Дата добавления - 22.02.2018 в 15:22
Апострофф Дата: Четверг, 22.02.2018, 16:38 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 123 ±
Замечаний: 0% ±

Excel 1997
ant6729, верни на место ScreenUpdating, выполнив
[vba]
Код
Application.ScreenUpdating = TRUE
[/vba],
удали (заремируй) строку
[vba]
Код
'On Error Resume Next
[/vba],
пройди макрос по шагам - [F8], наблюдая за происходящим на сцене (в Экселе).
Если озарения не случится - обращайтесь с оставшимися вопросами (надеюсь, они будут уже более внятными).
 
Ответить
Сообщениеant6729, верни на место ScreenUpdating, выполнив
[vba]
Код
Application.ScreenUpdating = TRUE
[/vba],
удали (заремируй) строку
[vba]
Код
'On Error Resume Next
[/vba],
пройди макрос по шагам - [F8], наблюдая за происходящим на сцене (в Экселе).
Если озарения не случится - обращайтесь с оставшимися вопросами (надеюсь, они будут уже более внятными).

Автор - Апострофф
Дата добавления - 22.02.2018 в 16:38
ant6729 Дата: Четверг, 22.02.2018, 17:16 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Спотыкаюсь на[vba]
Код
Set wb_ = GetObject(fp_ & fn_)
[/vba] пишет run - time error
Код ошибки 429
Active component cant create object
Может, кто-то ориентируется...
 
Ответить
СообщениеСпотыкаюсь на[vba]
Код
Set wb_ = GetObject(fp_ & fn_)
[/vba] пишет run - time error
Код ошибки 429
Active component cant create object
Может, кто-то ориентируется...

Автор - ant6729
Дата добавления - 22.02.2018 в 17:16
Hugo Дата: Четверг, 22.02.2018, 18:27 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
GetObject() бывает глючит на каких-то файлах, тоже сталкивался, причину не выяснял.
Просто замените на стандартное workbooks.open(), тем более что мигать особо всё равно не будет.
И по коду - нужно и для rows.count указывать чьё берёте, а то можете накосячить или попасть на ошибку.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеGetObject() бывает глючит на каких-то файлах, тоже сталкивался, причину не выяснял.
Просто замените на стандартное workbooks.open(), тем более что мигать особо всё равно не будет.
И по коду - нужно и для rows.count указывать чьё берёте, а то можете накосячить или попасть на ошибку.

Автор - Hugo
Дата добавления - 22.02.2018 в 18:27
Апострофф Дата: Четверг, 22.02.2018, 18:33 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 445
Репутация: 123 ±
Замечаний: 0% ±

Excel 1997
ant6729, вместо GetObject куда логичнее использовать WORKBOOKS.OPEN...
Только не запутайтесь в активных книгах.
 
Ответить
Сообщениеant6729, вместо GetObject куда логичнее использовать WORKBOOKS.OPEN...
Только не запутайтесь в активных книгах.

Автор - Апострофф
Дата добавления - 22.02.2018 в 18:33
Hugo Дата: Четверг, 22.02.2018, 18:34 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
А точно файлы на открывает? Может открывает, но именно rows.count и косячит...
Хотя если там ошибка именно при открытии - тогда ясно.


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Четверг, 22.02.2018, 18:35
 
Ответить
СообщениеА точно файлы на открывает? Может открывает, но именно rows.count и косячит...
Хотя если там ошибка именно при открытии - тогда ясно.

Автор - Hugo
Дата добавления - 22.02.2018 в 18:34
ant6729 Дата: Четверг, 22.02.2018, 21:22 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Цитата Апострофф, 22.02.2018 в 18:33, в сообщении № 5 ()
вместо GetObject куда логичнее использовать WORKBOOKS.OPEN...


До того, как сюда написать... пробовал... идти этим путем)...Потом еще раз пройдусь, подумаю...
Но пока пришлось написать...

А точно файлы на открывает? Может открывает, но именно rows.count и косячит...
Хотя если там ошибка именно при открытии - тогда ясно.


Да, после комментирования на ней стопорит

Если положить туда же обычный файл - то ок... эти он видит, открывает, читает

Признаться, и эти он видит...Скажем, положим таких файлов 8 штук... в процедуре пройдет 8 циклов... но ни одного из них она не откроет и в открытую книгу не прочитает.

Пока всем спасибо!
 
Ответить
Сообщение
Цитата Апострофф, 22.02.2018 в 18:33, в сообщении № 5 ()
вместо GetObject куда логичнее использовать WORKBOOKS.OPEN...


До того, как сюда написать... пробовал... идти этим путем)...Потом еще раз пройдусь, подумаю...
Но пока пришлось написать...

А точно файлы на открывает? Может открывает, но именно rows.count и косячит...
Хотя если там ошибка именно при открытии - тогда ясно.


Да, после комментирования на ней стопорит

Если положить туда же обычный файл - то ок... эти он видит, открывает, читает

Признаться, и эти он видит...Скажем, положим таких файлов 8 штук... в процедуре пройдет 8 циклов... но ни одного из них она не откроет и в открытую книгу не прочитает.

Пока всем спасибо!

Автор - ant6729
Дата добавления - 22.02.2018 в 21:22
Karataev Дата: Четверг, 22.02.2018, 21:29 | Сообщение № 8
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
У этих файлов (из поста 1) формат старый, видимо из-за этого и не работает. Откройте файл и сделайте Сохранить как - прочитайте в диалоговом окне внизу "Тип файла".
 
Ответить
СообщениеУ этих файлов (из поста 1) формат старый, видимо из-за этого и не работает. Откройте файл и сделайте Сохранить как - прочитайте в диалоговом окне внизу "Тип файла".

Автор - Karataev
Дата добавления - 22.02.2018 в 21:29
ant6729 Дата: Суббота, 24.02.2018, 15:41 | Сообщение № 9
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Сегодня еще раз сам пробовал привинтить Workbooks.Open...
[vba]
Код
Sub Attach2File_test()
Filenames = GetFilePath()
End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файлы для обработки", _
Optional ByVal InitialPath As String = "D:\4\", _
Optional ByVal FilterDescription As String = "", _
Optional ByVal FilterExtention As String = "*.*") As String
On Error Resume Next

With Application.FileDialog(msoFileDialogOpen)
.ButtonName = "Выбрать": .Title = Title:
.InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
.Filters.Clear: .Filters.Add FilterDescription, FilterExtention
.AllowMultiSelect = True

If .Show <> -1 Then Exit Function

For Each vrtSelectedItem In .SelectedItems

folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
SaveSetting Application.Name, "GetFilePath", "folder", folder$
Workbooks.Add
Call test(vrtSelectedItem)

Next vrtSelectedItem

End With
End Function

Sub test(s)

Set wb = Workbooks.Open(s)
wb.Worksheets(1).Select
On Error Resume Next
With wb_.Sheets("Sheet1")
lr1 = Cells(Rows.Count, 2).End(xlUp).Row + 1
' MsgBox lr1
lr2 = .Cells(Rows.Count, 2).End(xlUp).Row
.Range("A3:J3").Resize(lr2).Copy Cells(lr1, 1)
End With
wb_.Close False
lr_ = Empty
wb.Close SaveChanges:=True
End Sub
[/vba]

Но в активную книгу после Workbooks.Add не хочет считывать

По другому еще пробовал... но не суть...
Подскажите, пожалуйста, как мне его тут использовать


Сообщение отредактировал ant6729 - Суббота, 24.02.2018, 15:43
 
Ответить
СообщениеСегодня еще раз сам пробовал привинтить Workbooks.Open...
[vba]
Код
Sub Attach2File_test()
Filenames = GetFilePath()
End Sub
Function GetFilePath(Optional ByVal Title As String = "Выберите файлы для обработки", _
Optional ByVal InitialPath As String = "D:\4\", _
Optional ByVal FilterDescription As String = "", _
Optional ByVal FilterExtention As String = "*.*") As String
On Error Resume Next

With Application.FileDialog(msoFileDialogOpen)
.ButtonName = "Выбрать": .Title = Title:
.InitialFileName = GetSetting(Application.Name, "GetFilePath", "folder", InitialPath)
.Filters.Clear: .Filters.Add FilterDescription, FilterExtention
.AllowMultiSelect = True

If .Show <> -1 Then Exit Function

For Each vrtSelectedItem In .SelectedItems

folder$ = Left(.SelectedItems(1), InStrRev(.SelectedItems(1), "\"))
SaveSetting Application.Name, "GetFilePath", "folder", folder$
Workbooks.Add
Call test(vrtSelectedItem)

Next vrtSelectedItem

End With
End Function

Sub test(s)

Set wb = Workbooks.Open(s)
wb.Worksheets(1).Select
On Error Resume Next
With wb_.Sheets("Sheet1")
lr1 = Cells(Rows.Count, 2).End(xlUp).Row + 1
' MsgBox lr1
lr2 = .Cells(Rows.Count, 2).End(xlUp).Row
.Range("A3:J3").Resize(lr2).Copy Cells(lr1, 1)
End With
wb_.Close False
lr_ = Empty
wb.Close SaveChanges:=True
End Sub
[/vba]

Но в активную книгу после Workbooks.Add не хочет считывать

По другому еще пробовал... но не суть...
Подскажите, пожалуйста, как мне его тут использовать

Автор - ant6729
Дата добавления - 24.02.2018 в 15:41
Karataev Дата: Суббота, 24.02.2018, 15:47 | Сообщение № 10
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
Вот здесь нестыковка.
Здесь нет точки перед Cells, значит работа с активным файлом. Активный файл у Вас это открытый файл. Но к открытому файлу Вы обращаетесь по имени "wb_".
[vba]
Код
lr1 = Cells(Rows.Count, 2).End(xlUp).Row + 1
[/vba]
Здесь есть точка перед "Cells". То есть идет работа с открытым файлом.
[vba]
Код
lr2 = .Cells(Rows.Count, 2).End(xlUp).Row
[/vba]


Сообщение отредактировал Karataev - Суббота, 24.02.2018, 15:56
 
Ответить
СообщениеВот здесь нестыковка.
Здесь нет точки перед Cells, значит работа с активным файлом. Активный файл у Вас это открытый файл. Но к открытому файлу Вы обращаетесь по имени "wb_".
[vba]
Код
lr1 = Cells(Rows.Count, 2).End(xlUp).Row + 1
[/vba]
Здесь есть точка перед "Cells". То есть идет работа с открытым файлом.
[vba]
Код
lr2 = .Cells(Rows.Count, 2).End(xlUp).Row
[/vba]

Автор - Karataev
Дата добавления - 24.02.2018 в 15:47
ant6729 Дата: Суббота, 24.02.2018, 16:22 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Да, если . то идет работа с открытым файлом... Процедура его считывает, получает значение в переменную.
А потом вот это вот[vba]
Код
.Range("A3:J3").Resize(lr2).Copy Cells(lr1, 1)
[/vba] она не делает
Хотя с методом [vba]
Код
GetObject
[/vba] рубила прекрасно
Это ясно, еще до того, как я сюда написал, равно как и
У этих файлов (из поста 1) формат старый

Это я тоже знаю, потому что на новом формате все летало.
 
Ответить
СообщениеДа, если . то идет работа с открытым файлом... Процедура его считывает, получает значение в переменную.
А потом вот это вот[vba]
Код
.Range("A3:J3").Resize(lr2).Copy Cells(lr1, 1)
[/vba] она не делает
Хотя с методом [vba]
Код
GetObject
[/vba] рубила прекрасно
Это ясно, еще до того, как я сюда написал, равно как и
У этих файлов (из поста 1) формат старый

Это я тоже знаю, потому что на новом формате все летало.

Автор - ant6729
Дата добавления - 24.02.2018 в 16:22
Karataev Дата: Суббота, 24.02.2018, 16:44 | Сообщение № 12
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
 
Ответить
Сообщение

Автор - Karataev
Дата добавления - 24.02.2018 в 16:44
ant6729 Дата: Суббота, 24.02.2018, 20:04 | Сообщение № 13
Группа: Проверенные
Ранг: Ветеран
Сообщений: 533
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Блин... я раньше по другому делал одну процедуру....
Название файлов было с датами и я считывал системные даты и так определял нужный мне ActiveSheet...
Но теперь понял приём с [vba]
Код
ActiveSheet
[/vba]

Karataev, Спасибо!!!
 
Ответить
СообщениеБлин... я раньше по другому делал одну процедуру....
Название файлов было с датами и я считывал системные даты и так определял нужный мне ActiveSheet...
Но теперь понял приём с [vba]
Код
ActiveSheet
[/vba]

Karataev, Спасибо!!!

Автор - ant6729
Дата добавления - 24.02.2018 в 20:04
RAN Дата: Суббота, 24.02.2018, 20:12 | Сообщение № 14
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
и так определял нужный мне ActiveSheet

Немного (или много?) смахивает на бред сивой кобылы.
ActiveSheet в одном экземпляре Excel может быть только один. Из 1 листа суметь выделить нужный, и не нужный - это нужно Акопяна, или Гудини. :D


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
и так определял нужный мне ActiveSheet

Немного (или много?) смахивает на бред сивой кобылы.
ActiveSheet в одном экземпляре Excel может быть только один. Из 1 листа суметь выделить нужный, и не нужный - это нужно Акопяна, или Гудини. :D

Автор - RAN
Дата добавления - 24.02.2018 в 20:12
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Процедура не обрабатывает документы из директории. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!