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

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

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

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

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

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

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

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

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
6978 / 2879 / 552
Регистрация: 19.10.2012
Сообщений: 8,765
19.09.2016, 17:40 6
Цитата Сообщение от quende Посмотреть сообщение
Честно говоря, не проверял
- да ладно, тот кто писал наверняка на чём-то проверял, на чём-то точно работало
0
19 / 19 / 5
Регистрация: 23.04.2014
Сообщений: 72
19.09.2016, 17:41 7
Цитата Сообщение от Hugo121 Посмотреть сообщение
тот кто писал
писал я.
но не проверял, поскольку не создавал документов с датами. От автора файлов нет. На чем проверять ?
не пойму Вашего сарказма.
0
6978 / 2879 / 552
Регистрация: 19.10.2012
Сообщений: 8,765
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 / до $1000
Доброго времени суток, форумчане. Возникла необходимость в покупке нового ноутбука. Основной...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Администрирован­­­ие Git, продвинутые техники работы с Git
InfoMaster 11.01.2025
Основы управления репозиторием Эффективное управление Git-репозиторием требует глубокого понимания механизмов контроля доступа и инструментов администрирования. Рассмотрим ключевые аспекты. . .
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru