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

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте. Нужна ваша помощь. Есть 3 документа, в каждом первый столбец с датами. Нужно написать макрос, который выделит и скопирует текст из каждого документа по датам, которые записаны в 2 ячейки(от какой даты и до какой) в моем документе, и вставил в документ. Буду очень благодарен за помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
6944 / 2849 / 548
Регистрация: 19.10.2012
Сообщений: 8,724
19.09.2016, 17:40 6
Цитата Сообщение от quende Посмотреть сообщение
Честно говоря, не проверял
- да ладно, тот кто писал наверняка на чём-то проверял, на чём-то точно работало
0
19 / 19 / 5
Регистрация: 23.04.2014
Сообщений: 72
19.09.2016, 17:41 7
Цитата Сообщение от Hugo121 Посмотреть сообщение
тот кто писал
писал я.
но не проверял, поскольку не создавал документов с датами. От автора файлов нет. На чем проверять ?
не пойму Вашего сарказма.
0
6944 / 2849 / 548
Регистрация: 19.10.2012
Сообщений: 8,724
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2016, 21:32
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru