Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 18
1

Макрос для работы с несколькими документами

15.09.2016, 07:51. Показов 1656. Ответов 8

Author24 — интернет-сервис помощи студентам
Здравствуйте. Нужна ваша помощь. Есть 3 документа, в каждом первый столбец с датами. Нужно написать макрос, который выделит и скопирует текст из каждого документа по датам, которые записаны в 2 ячейки(от какой даты и до какой) в моем документе, и вставил в документ. Буду очень благодарен за помощь.
0
15.09.2016, 07:51
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.09.2016, 07:51
Ответы с готовыми решениями:

Небольшая бд в Excel для работы с документами
Здравствуйте! Подскажите пожалуйста как с этим побороться... Решил программно облегчить ежедневные, рутинные, однодневные действия,...

Xpath для работы с xml документами
Добрый вечер.Столкнулась с задачей,требующей преобразование xml документа,хранящегося в одной из таблиц пользовательской базы данных....

Инструменты для работы с Compound документами
Подскажите, пожалуйста, есть ли для VB интрументы для работы с Compound документами (документы Word, Excell и т.п.)? И, если есть, то где...

8
5 / 5 / 5
Регистрация: 03.03.2011
Сообщений: 43
18.09.2016, 03:16 2
Я правильно понял, что текст, который надо скопировать, во второй колонке, или колонок может быть больше?
Устроит ли вариант, чтобы данные доставались из одной, активной на момент запуска макроса, книги? Или укажите по какому принципу макрос должен понимать из каких книг брать данные, если их открыт, например, десяток.
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 18
18.09.2016, 08:35  [ТС] 3
Колонок больше, но фиксированное количество. На счет одной книги - устроит любой вариант.

Добавлено через 4 минуты
Получается, что диапазон колонок я знаю, нужно только выделить диапазон по датах и скопировать.
0
19 / 19 / 5
Регистрация: 23.04.2014
Сообщений: 72
19.09.2016, 17:19 4
Честно говоря, не проверял, но должно работать.
Visual Basic
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
Option Base 1
 
Sub qweqwe()
Dim Wb As Workbook
Dim Nwb As Workbook
Dim Da1 As Date, Da2 As Date
Dim FDS As FileDialogSelectedItems
Dim File$, k As Long, s As Long, sC%
Dim Arr1, Arr2, Arr3
Dim Arr
Dim MaxSc%
 
Application.ScreenUpdating = False
 
Da1 = ThisWorkbook.Sheets(1).Cells(1, 1)
Da2 = ThisWorkbook.Sheets(1).Cells(1, 2)
 
Set Wb1 = Workbooks.Open(GFC("Выберите файл1", ThisWorkbook.Path))
Set Wb2 = Workbooks.Open(GFC("Выберите файл2", ThisWorkbook.Path))
Set Wb3 = Workbooks.Open(GFC("Выберите файл3", ThisWorkbook.Path))
 
s = Wb1.Sheets(1).Cells(1, 1).End(xlDown).Row
sC = Wb1.Sheets(1).Cells(1, 1).End(xlToRight).Column
If sC > MaxSc Then MaxSc = sC
Arr1 = Range(Wb1.Sheets(1).Cells(1, 1), Wb1.Sheets(1).Cells(s, sC))
 
s = Wb2.Sheets(1).Cells(1, 1).End(xlDown).Row
sC = Wb2.Sheets(1).Cells(1, 1).End(xlToRight).Column
If sC > MaxSc Then MaxSc = sC
Arr2 = Range(Wb2.Sheets(1).Cells(1, 1), Wb2.Sheets(1).Cells(s, sC))
 
s = Wb3.Sheets(1).Cells(1, 1).End(xlDown).Row
sC = Wb3.Sheets(1).Cells(1, 1).End(xlToRight).Column
If sC > MaxSc Then MaxSc = sC
Arr3 = Range(Wb3.Sheets(1).Cells(1, 1), Wb3.Sheets(1).Cells(s, sC))
 
Wb1.Close False
Wb2.Close False
Wb3.Close False
 
ReDim Arr(UBound(Arr1) + UBound(Arr2) + UBound(Arr3), MaxSc)
 
k = 1
 
 
For i = 1 To UBound(Arr1)
    If CDate(Arr1(i, 1)) >= Da1 And CDate(Arr1(i, 1)) <= Da2 Then
        For j = 1 To UBound(Arr1, 2)
            Arr(k, j) = Arr1(i, j)
        Next j
        k = k + 1
    End If
Next i
 
For i = 1 To UBound(Arr2)
    If CDate(Arr2(i, 1)) >= Da1 And CDate(Arr2(i, 1)) <= Da2 Then
        For j = 1 To UBound(Arr2, 2)
            Arr(k, j) = Arr2(i, j)
        Next j
        k = k + 1
    End If
Next i
 
For i = 1 To UBound(Arr3)
    If CDate(Arr3(i, 1)) >= Da1 And CDate(Arr3(i, 1)) <= Da2 Then
        For j = 1 To UBound(Arr3, 2)
            Arr(k, j) = Arr3(i, j)
        Next j
        k = k + 1
    End If
Next i
 
Set Nwb = Workbooks.Add(xlWBATWorksheet)
Nwb.Sheets(1).Cells(1, 1).Resize(UBound(Arr), UBound(Arr, 2)) = Arr
 
End Sub
 
Function GFC(Optional ByVal Title As String = "Выберите файл для обработки", _
                     Optional ByVal InitialPath, _
                     Optional ByVal MyFilter As String = "Excel (*.xls*),") As String
    If Not IsMissing(InitialPath) Then
        On Error Resume Next: ChDrive Left(InitialPath, 1)
        ChDir InitialPath
    End If
    res = Application.GetOpenFilename(MyFilter, , Title, "Открыть")
    GetFileName = IIf(VarType(res) = vbBoolean, "", res)
End Function
0
5 / 5 / 5
Регистрация: 03.03.2011
Сообщений: 43
19.09.2016, 17:39 5
В книге с макросом есть лист "result" (куда будут добавляться результаты) и лист "params" с данными в ячейках В1 начальная дата, В2 конечная дата, В3 количество колонок которые будут копироваться.
Макрос нужно запускать, когда активна книга с исходными данными. После окончания выборки данных активируется книга с результатом (с макросом).
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub qqq()
Dim src As Worksheet, dst As Worksheet, params As Range
    Set src = ActiveSheet
    Set dst = ThisWorkbook.Worksheets("result")
    Set params = ThisWorkbook.Worksheets("params").Cells
    dfrom = params(1, 2)
    dto = params(2, 2)
    col = params(3, 2)
    dst_r = dst.Cells(dst.Cells.Rows.Count, 1).End(xlUp).Row
    If dst.Cells(dst_r, 1) <> "" Then dst_r = dst_r + 1
 
    Application.ScreenUpdating = False
    For r = 1 To src.UsedRange.Rows.Count
        If dfrom <= Cells(r, 1) And Cells(r, 1) <= dto Then
            Range(Cells(r, 2), Cells(r, 1 + col)).Copy dst.Cells(dst_r, 1)
            dst_r = dst_r + 1
        End If
    Next
    Application.CutCopyMode = False
    dst.Activate
    Application.ScreenUpdating = True
End Sub
Вложения
Тип файла: xls Копировать в датах.xls (45.0 Кб, 3 просмотров)
0
6991 / 2890 / 554
Регистрация: 19.10.2012
Сообщений: 8,790
19.09.2016, 17:40 6
Цитата Сообщение от quende Посмотреть сообщение
Честно говоря, не проверял
- да ладно, тот кто писал наверняка на чём-то проверял, на чём-то точно работало
0
19 / 19 / 5
Регистрация: 23.04.2014
Сообщений: 72
19.09.2016, 17:41 7
Цитата Сообщение от Hugo121 Посмотреть сообщение
тот кто писал
писал я.
но не проверял, поскольку не создавал документов с датами. От автора файлов нет. На чем проверять ?
не пойму Вашего сарказма.
0
6991 / 2890 / 554
Регистрация: 19.10.2012
Сообщений: 8,790
19.09.2016, 21:21 8
Цитата Сообщение от quende Посмотреть сообщение
писал я.
но не проверял, поскольку не создавал документов с датами.
Ну тогда извиняюсь
Я чуть проверил на "мышах" - нужно выбрать что-то одно: GFC или GetFileName... Далее до извлечения данных доходит, но т.к. у меня тоже нет документов с датами - на этом стоп.
А проверил потому что заинтересовало FDS As FileDialogSelectedItems - кстати так и не использовали... вместе с Wb и File$.
0
19 / 19 / 5
Регистрация: 23.04.2014
Сообщений: 72
19.09.2016, 21:32 9
все верно, потому что сначала делал через коллекцию, для унификации, потом не стал заморачиваться. GFC - GetFilesCollection. в итоге передумал и сделал согласно задаче, через три массива, поскольку в тз именно три файла. дальше по коду.
0
19.09.2016, 21:32
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.09.2016, 21:32
Помогаю со студенческими работами здесь

База данных для работы с архивными документами
Я историк, делаю большой научный проект, предполагающий работу с архивным материалом. Сложная схема, не буду грузить, в целом база...

Планшет для инета, работы с документами, 1С и фотошопом
Добрый день. Какой планшет лучше взять,чтобы можно было ползать в инете,работать с документами,1С и фотошопом? Просто мне сказали,что...

Программа для работы с Excel и Word документами
Подскажите, пожалуйста, какими инструментами лучше воспользоваться. Требуется написать программу, которая будет извлекать данные из excel и...

Ноутбук для работы с большими документами Excel / до $1000
Доброго времени суток, форумчане. Возникла необходимость в покупке нового ноутбука. Основной задачей будет работа с большими файлами...

Какая линукс подойдёт для работы с таблицами и документами?
какой линукс, внешне похожий на windows xp и руссифицированный, поставить работнику, работают с таблицами и текстовым редактором


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Использование кэша Laravel - полный гайд
bytestream 18.02.2025
Кэширование - один из наиболее эффективных способов повышения производительности веб-приложений. В современном мире, где скорость загрузки страниц напрямую влияет на удержание пользователей и. . .
Создаем REST API в Laravel с аутентификацией через Passport
bytestream 18.02.2025
Разработка современных веб-приложений все чаще требует создания надежного и хорошо структурированного API. REST API стал стандартом де-факто для построения взаимодействия между клиентской и серверной. . .
Пайплайны в Laravel - полный гайд
bytestream 18.02.2025
Разработка современных веб-приложений часто требует обработки сложных процессов, состоящих из множества последовательных шагов. Например, при создании системы комментариев может потребоваться. . .
Как правильно использовать @required в Symfony
bytestream 18.02.2025
При разработке приложений на Symfony мы часто сталкиваемся с необходимостью внедрения зависимостей. Фреймворк предоставляет несколько способов управления этим процессом, и одним из таких инструментов. . .
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru