Дата: Воскресенье, 11.08.2013, 23:25 |
Сообщение № 1
Группа: Гости
Помогите пожалуйста. Есть папка с файлами excel. Названия файлов "Книга №1 о том", "Книга №2 о сем" и т.д. В этих файлах на одних и тех же ячейках находятся данные. Я хочу написать макрос чтобы он открывал книги по порядку и данные из нужных мне ячеек заносил в общую таблицу. Подскажите как мне сделать переменную обращения к книгам типа x = ["Книга№"x1"*".xls] чтобы загнать ее в цикл и меняя x1 перебрать все файлы в папке.
Помогите пожалуйста. Есть папка с файлами excel. Названия файлов "Книга №1 о том", "Книга №2 о сем" и т.д. В этих файлах на одних и тех же ячейках находятся данные. Я хочу написать макрос чтобы он открывал книги по порядку и данные из нужных мне ячеек заносил в общую таблицу. Подскажите как мне сделать переменную обращения к книгам типа x = ["Книга№"x1"*".xls] чтобы загнать ее в цикл и меняя x1 перебрать все файлы в папке.Алексей
Дата: Понедельник, 12.08.2013, 08:41 |
Сообщение № 3
Группа: Гости
У меня получилось так:
[vba]
Код
Sub Подготовка1()
Dim x As String Dim x1 As Long Dim i As Single
x1 = 1 i = 4
ChDir "C:\Users\acer\Desktop\2013\" For x1 = 1 To 5 x = "№" & CStr(x1) & "*.xls" MsgBox (x) Range("a" & i).Value = x1 Range("b" & i).Value = _ "='[x]Лист2'!b11" Range("c" & i).Value = _ "='[x]Лист2'!b3" Range("d" & i).Value = _ "='[x]Лист1'!b4" i = i + 1 Next x1 End Sub
[/vba] Но при каждом обращении к x он выдает окно "обновить x" с папкой 2013 где я должен выбрать нужный мне файл excel вручную(то есть мне из файла надо взять значение 3 ячеек и этот файл я должен выбрать файл 4 раза, затем следующий). Как сделать чтобы он файл выбирал сам?
У меня получилось так:
[vba]
Код
Sub Подготовка1()
Dim x As String Dim x1 As Long Dim i As Single
x1 = 1 i = 4
ChDir "C:\Users\acer\Desktop\2013\" For x1 = 1 To 5 x = "№" & CStr(x1) & "*.xls" MsgBox (x) Range("a" & i).Value = x1 Range("b" & i).Value = _ "='[x]Лист2'!b11" Range("c" & i).Value = _ "='[x]Лист2'!b3" Range("d" & i).Value = _ "='[x]Лист1'!b4" i = i + 1 Next x1 End Sub
[/vba] Но при каждом обращении к x он выдает окно "обновить x" с папкой 2013 где я должен выбрать нужный мне файл excel вручную(то есть мне из файла надо взять значение 3 ячеек и этот файл я должен выбрать файл 4 раза, затем следующий). Как сделать чтобы он файл выбирал сам?Алексей
SergeyKorotun, Может я и не прав ( пусть старшие товарищи поправят), но Set wb = Workbooks.Open предполагает ПОЛНЫЙ путь к файлу, а не к папке, где этот файл лежит. Алексей, Леха, Леха, без файла все так плёхо!...
SergeyKorotun, Может я и не прав ( пусть старшие товарищи поправят), но Set wb = Workbooks.Open предполагает ПОЛНЫЙ путь к файлу, а не к папке, где этот файл лежит. Алексей, Леха, Леха, без файла все так плёхо!... RAN
"*" это в каждом случае разный текст. Пимеры: №1-2013 Алексей.xls №2-2013 Иван Петрович.xls №3 Федор(предоплата).xls №4-Сергею до 11_03_13.xls и т. д. Я думал весь текст за номером получиться заменить звездочкой. Как при поиске в виндовозе. Весь смысл в переборе файлов не смотря на названия. [moder]Вам уже дважды писали о том, что нужно приложить файл. Еще одно сообщение без файла и я заблокирую Ваш IP-шник
"*" это в каждом случае разный текст. Пимеры: №1-2013 Алексей.xls №2-2013 Иван Петрович.xls №3 Федор(предоплата).xls №4-Сергею до 11_03_13.xls и т. д. Я думал весь текст за номером получиться заменить звездочкой. Как при поиске в виндовозе. Весь смысл в переборе файлов не смотря на названия. [moder]Вам уже дважды писали о том, что нужно приложить файл. Еще одно сообщение без файла и я заблокирую Ваш IP-шникАлексей
В приложенном файле в имени уже нет "№" Нет времени на тестирование. Попробуйте так. [vba]
Код
Sub Подготовка1() Dim x As String Dim x1 As Long Dim wb As Workbook Dim i As Long i = 4 'ChDir "C:\Users\acer\Desktop\2013\" Application.ScreenUpdating = False For x1 = 1 To 5 x = "№" & CStr(x1) & "*.xls" 'MsgBox (x) Set wb = Workbooks.Open("C:\Users\acer\Desktop\2013\" & Dir("C:\Users\acer\Desktop\2013\" & x)) ThisWorkbook.Worksheets(1).Range("a" & x1+i).Value = x1 ThisWorkbook.Worksheets(1).Range("b" & x1+i).Value = Range("b11").Value ThisWorkbook.Worksheets(1).Range("c" & x1+i).Value = Range("b3").Value ThisWorkbook.Worksheets(1).Range("d" & x1+i).Value = Range("b4").Value wb.Close Next x1 Application.ScreenUpdating = True End Sub
[/vba]
В приложенном файле в имени уже нет "№" Нет времени на тестирование. Попробуйте так. [vba]
Код
Sub Подготовка1() Dim x As String Dim x1 As Long Dim wb As Workbook Dim i As Long i = 4 'ChDir "C:\Users\acer\Desktop\2013\" Application.ScreenUpdating = False For x1 = 1 To 5 x = "№" & CStr(x1) & "*.xls" 'MsgBox (x) Set wb = Workbooks.Open("C:\Users\acer\Desktop\2013\" & Dir("C:\Users\acer\Desktop\2013\" & x)) ThisWorkbook.Worksheets(1).Range("a" & x1+i).Value = x1 ThisWorkbook.Worksheets(1).Range("b" & x1+i).Value = Range("b11").Value ThisWorkbook.Worksheets(1).Range("c" & x1+i).Value = Range("b3").Value ThisWorkbook.Worksheets(1).Range("d" & x1+i).Value = Range("b4").Value wb.Close Next x1 Application.ScreenUpdating = True End Sub
Sub Podgotovka1() Dim x As String Dim x1 As Long Dim wb As Workbook Dim i As Long i = 4 Ch_Dir = "C:\Users\acer\Desktop\2013\" Application.ScreenUpdating = False x1 = 1 x = "№*.xls" nmfile = Dir(Ch_Dir & x) pthname = Ch_Dir + nmfile MsgBox (pthname)
Do While nmfile <> "" nmfile = Dir() pthname = Ch_Dir + nmfile x1 = x1 + 1 If nmfile <> "" Then MsgBox (pthname) Set wb = Workbooks.Open(pthname) ThisWorkbook.Worksheets(1).Range("a" & x1 + i).Value = x1 ThisWorkbook.Worksheets(1).Range("b" & x1 + i).Value = Range("b11").Value ThisWorkbook.Worksheets(1).Range("c" & x1 + i).Value = Range("b3").Value ThisWorkbook.Worksheets(1).Range("d" & x1 + i).Value = Range("b4").Value Application.DisplayAlerts = False wb.Close Application.DisplayAlerts = True End If Loop Application.ScreenUpdating = True End Sub
[/vba]
[vba]
Код
Sub Podgotovka1() Dim x As String Dim x1 As Long Dim wb As Workbook Dim i As Long i = 4 Ch_Dir = "C:\Users\acer\Desktop\2013\" Application.ScreenUpdating = False x1 = 1 x = "№*.xls" nmfile = Dir(Ch_Dir & x) pthname = Ch_Dir + nmfile MsgBox (pthname)
Do While nmfile <> "" nmfile = Dir() pthname = Ch_Dir + nmfile x1 = x1 + 1 If nmfile <> "" Then MsgBox (pthname) Set wb = Workbooks.Open(pthname) ThisWorkbook.Worksheets(1).Range("a" & x1 + i).Value = x1 ThisWorkbook.Worksheets(1).Range("b" & x1 + i).Value = Range("b11").Value ThisWorkbook.Worksheets(1).Range("c" & x1 + i).Value = Range("b3").Value ThisWorkbook.Worksheets(1).Range("d" & x1 + i).Value = Range("b4").Value Application.DisplayAlerts = False wb.Close Application.DisplayAlerts = True End If Loop Application.ScreenUpdating = True End Sub
Спасибо огромное!!! Все заработало, только в каждом файле, что обработал макрос, excel предлагает сохранить изменения. Я дописал в цикле "wb.Save". Притормаживает, но работает. Еще раз спасибо!
Спасибо огромное!!! Все заработало, только в каждом файле, что обработал макрос, excel предлагает сохранить изменения. Я дописал в цикле "wb.Save". Притормаживает, но работает. Еще раз спасибо!Алексей33
Application.DisplayAlerts = False должно подавлять подобные предложения. У меня, хотя и не на ваших таблицах, никаких запросов на сохранение не выскакивает.
Application.DisplayAlerts = False должно подавлять подобные предложения. У меня, хотя и не на ваших таблицах, никаких запросов на сохранение не выскакивает.SergeyKorotun
14 сообщение относилось к 12 не тестированному. Да, в версии 13 все работает отлично. Она даже прощает наши косяки (у нас было несколько файлов с именем №5) программа все обработала корректно. Но выдает запрос при обработке каждого файла(картинка прикреплена). Держу Enter 2 минуты и таблица готова)))). Еще раз спасибо. Без Вас бы не справился, 9 лет с Политеха VBA в глаза не видел, а тут понадобилось.
14 сообщение относилось к 12 не тестированному. Да, в версии 13 все работает отлично. Она даже прощает наши косяки (у нас было несколько файлов с именем №5) программа все обработала корректно. Но выдает запрос при обработке каждого файла(картинка прикреплена). Держу Enter 2 минуты и таблица готова)))). Еще раз спасибо. Без Вас бы не справился, 9 лет с Политеха VBA в глаза не видел, а тут понадобилось.Алексей33