Когда использую цикл для получения инфо из файлов в один, то код
[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_)
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... но что это меняет...
Всем добрый день!
Когда использую цикл для получения инфо из файлов в один, то код
[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_)
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], наблюдая за происходящим на сцене (в Экселе). Если озарения не случится - обращайтесь с оставшимися вопросами (надеюсь, они будут уже более внятными).Апострофф
GetObject() бывает глючит на каких-то файлах, тоже сталкивался, причину не выяснял. Просто замените на стандартное workbooks.open(), тем более что мигать особо всё равно не будет. И по коду - нужно и для rows.count указывать чьё берёте, а то можете накосячить или попасть на ошибку.
GetObject() бывает глючит на каких-то файлах, тоже сталкивался, причину не выяснял. Просто замените на стандартное workbooks.open(), тем более что мигать особо всё равно не будет. И по коду - нужно и для rows.count указывать чьё берёте, а то можете накосячить или попасть на ошибку.Hugo
А точно файлы на открывает? Может открывает, но именно rows.count и косячит... Хотя если там ошибка именно при открытии - тогда ясно.
Да, после комментирования на ней стопорит
Если положить туда же обычный файл - то ок... эти он видит, открывает, читает
Признаться, и эти он видит...Скажем, положим таких файлов 8 штук... в процедуре пройдет 8 циклов... но ни одного из них она не откроет и в открытую книгу не прочитает.
А точно файлы на открывает? Может открывает, но именно rows.count и косячит... Хотя если там ошибка именно при открытии - тогда ясно.
Да, после комментирования на ней стопорит
Если положить туда же обычный файл - то ок... эти он видит, открывает, читает
Признаться, и эти он видит...Скажем, положим таких файлов 8 штук... в процедуре пройдет 8 циклов... но ни одного из них она не откроет и в открытую книгу не прочитает.
У этих файлов (из поста 1) формат старый, видимо из-за этого и не работает. Откройте файл и сделайте Сохранить как - прочитайте в диалоговом окне внизу "Тип файла".
У этих файлов (из поста 1) формат старый, видимо из-за этого и не работает. Откройте файл и сделайте Сохранить как - прочитайте в диалоговом окне внизу "Тип файла".Karataev
Сегодня еще раз сам пробовал привинтить 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
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 не хочет считывать
По другому еще пробовал... но не суть... Подскажите, пожалуйста, как мне его тут использовать
Сегодня еще раз сам пробовал привинтить 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
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
Сообщение отредактировал ant6729 - Суббота, 24.02.2018, 15:43
Вот здесь нестыковка. Здесь нет точки перед Cells, значит работа с активным файлом. Активный файл у Вас это открытый файл. Но к открытому файлу Вы обращаетесь по имени "wb_". [vba]
Код
lr1 = Cells(Rows.Count, 2).End(xlUp).Row + 1
[/vba] Здесь есть точка перед "Cells". То есть идет работа с открытым файлом. [vba]
Код
lr2 = .Cells(Rows.Count, 2).End(xlUp).Row
[/vba]
Вот здесь нестыковка. Здесь нет точки перед Cells, значит работа с активным файлом. Активный файл у Вас это открытый файл. Но к открытому файлу Вы обращаетесь по имени "wb_". [vba]
Код
lr1 = Cells(Rows.Count, 2).End(xlUp).Row + 1
[/vba] Здесь есть точка перед "Cells". То есть идет работа с открытым файлом. [vba]
Sub test(s) Dim shAct As Worksheet, bkSrc As Workbook, shSrc As Worksheet Dim lr1 As Long, lr2 As Long Set shAct = ActiveSheet Set bkSrc = Workbooks.Open(s) Set shSrc = bkSrc.Worksheets(1) lr1 = shAct.Cells(shAct.Rows.Count, 2).End(xlUp).Row + 1 lr2 = shSrc.Cells(shSrc.Rows.Count, 2).End(xlUp).Row shSrc.Range("A3:J3").Resize(lr2).Copy shAct.Cells(lr1, 1) bkSrc.Close False End Sub
[/vba]
[vba]
Код
Sub test(s) Dim shAct As Worksheet, bkSrc As Workbook, shSrc As Worksheet Dim lr1 As Long, lr2 As Long Set shAct = ActiveSheet Set bkSrc = Workbooks.Open(s) Set shSrc = bkSrc.Worksheets(1) lr1 = shAct.Cells(shAct.Rows.Count, 2).End(xlUp).Row + 1 lr2 = shSrc.Cells(shSrc.Rows.Count, 2).End(xlUp).Row shSrc.Range("A3:J3").Resize(lr2).Copy shAct.Cells(lr1, 1) bkSrc.Close False End Sub
Блин... я раньше по другому делал одну процедуру.... Название файлов было с датами и я считывал системные даты и так определял нужный мне ActiveSheet... Но теперь понял приём с [vba]
Код
ActiveSheet
[/vba]
Karataev, Спасибо!!!
Блин... я раньше по другому делал одну процедуру.... Название файлов было с датами и я считывал системные даты и так определял нужный мне ActiveSheet... Но теперь понял приём с [vba]
Немного (или много?) смахивает на бред сивой кобылы. ActiveSheet в одном экземпляре Excel может быть только один. Из 1 листа суметь выделить нужный, и не нужный - это нужно Акопяна, или Гудини.
Немного (или много?) смахивает на бред сивой кобылы. ActiveSheet в одном экземпляре Excel может быть только один. Из 1 листа суметь выделить нужный, и не нужный - это нужно Акопяна, или Гудини. RAN