0 / 0 / 0
Регистрация: 05.03.2019
Сообщений: 102
1

Гуру exel нужно написать макрос

15.04.2020, 23:14. Показов 1675. Ответов 22

Author24 — интернет-сервис помощи студентам
Нужно создать макрос которые перебирает все документы exel в папке (по порядку имя) и заменяет определённое значение ячейки на то что введёт пользователь в диалоговом окне. Важно что бы имя Exel файла где то было видно в процессе ввода мною информации в это диалоговое окно, спасибо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2020, 23:14
Ответы с готовыми решениями:

Написать макрос в Exel
Сам текст задания звучит так: В транспортной компании работают водители грузовых автомобилей....

Работа с Word и Exel через макрос, который запускается в Exel
Есть задача: проводятся расчеты в Эксель и из него открывается документ Ворд(эта часть работает),...

Макрос: из PowerPoint развернуть Exel и вызвать уже в нём макрос
Собственно сабж. Работая в презентации PowerPoint нужно по клику на кнопку с прикреплённым макросом...

Нужно написать формулу Exel
Здравствуйте. Нужно написать формулу по следующим критериям. По рассчитанному среднему баллу за...

22
14 / 10 / 4
Регистрация: 19.07.2016
Сообщений: 101
16.04.2020, 16:08 2
Не понятно, в какой ячейке нужно что-то менять. Или какое конкретно значение.
0
0 / 0 / 0
Регистрация: 05.03.2019
Сообщений: 102
16.04.2020, 16:18  [ТС] 3
Fck_This, Ну вот для всех этих файлов мне нужно изменить дату (причем значение даты для каждого файла должно быть своё) в архиве файлы и скриншот
Вложения
Тип файла: 7z Пример.7z (649.5 Кб, 6 просмотров)
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
16.04.2020, 17:06 4
Я говорил что будут вопросы
Код кстати уже написан, чутка подправить адрес ячейки и всё...

Добавлено через 4 минуты
Цитата Сообщение от pgpavelgr Посмотреть сообщение
Важно что бы имя Exel файла где то было видно в процессе ввода мною информации в это диалоговое окно
- вот это не понял, какого файла? И зачем?
А код подправленный вот:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub tt()
    Dim d As Date
 
    On Error Resume Next
    d = InputBox("Введите дату")
    If Err = 0 Then
        Application.ScreenUpdating = False
        For Each f In CreateObject("Scripting.FileSystemObject").GetFolder("d:\Temp\test\").Files
            Set wb = Workbooks.Open(f)
            wb.Sheets(3).Cells(3, 9) = d
            wb.Close True
        Next
        Application.ScreenUpdating = True
    Else
        MsgBox "Просьба ввести дату!", vbCritical
    End If
    On Error GoTo 0
End Sub
Но там ведь есть ещё даты...

Добавлено через 5 минут
Кстати можно было сразу эту дату в том первом макросе, когда я шаблоны плодил, и менять.
0
14 / 10 / 4
Регистрация: 19.07.2016
Сообщений: 101
16.04.2020, 17:06 5
Имеется в виду, что надо показывать имя открываемого файла. типо
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
Sub tt()
    Dim d As Date
 
    On Error Resume Next
    
    If Err = 0 Then
        Application.ScreenUpdating = False
        For Each f In CreateObject("Scripting.FileSystemObject").GetFolder("d:\Temp\test").Files
            Set wb = Workbooks.Open(f)
InputAgain:
            d = InputBox("Введите дату для файла " & wb.name)
            If IsDate(d) = True Then
            wb.Sheets(1).Cells(3, 9) = d
            wb.Close True
            Else
            goto InputAgain
            End If
        Next
        Application.ScreenUpdating = True
    Else
        MsgBox "Просьба ввести дату!", vbCritical
    End If
    On Error GoTo 0
End Sub
+ можно добавить проверку на дату IsDate
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
16.04.2020, 17:15 6
Не заметил вот этого:
Цитата Сообщение от pgpavelgr Посмотреть сообщение
(причем значение даты для каждого файла должно быть своё)
Ну тогда да, можно так подправить, только проверку бы что точно дата, а не что-то другое ввели нужно добавить, и зациклить как-то удобно, что если где-то на 50-м файле ошиблись и забыли на каком, не перебирать всю кучу заново...

Добавлено через 3 минуты
If IsDate(d) = True Then хреново работает, я так в начале пробовал, поэтому сделал лучше обработку ошибок.
0
0 / 0 / 0
Регистрация: 05.03.2019
Сообщений: 102
16.04.2020, 17:37  [ТС] 7
Fck_This, Я попробовал ввести этот код. При запуске ничего не происходит

Добавлено через 57 секунд
Hugo121, И ваш код тоже я попробовал и он не работает при вводе даты ничего нигде не меняется
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
16.04.2020, 17:37 8
Вот более менее:
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
Sub tt()
    Dim d As Date
 
    On Error Resume Next
 
    Application.ScreenUpdating = False
    For Each f In CreateObject("Scripting.FileSystemObject").GetFolder("d:\Temp\test").Files
        Set wb = Workbooks.Open(f)
InputAgain:
        d = InputBox("Введите дату для файла " & wb.Name & vbNewLine & "отказаться - введите 1")
 
        If Format(d, "dd.mm.yyyy") = "31.12.1899" Then End
        If Err = 0 Then
            wb.Sheets(3).Cells(3, 9) = d
            wb.Close True
        Else
            Err.Clear
            MsgBox "Просьба ввести дату!", vbCritical
            GoTo InputAgain
        End If
    Next
    Application.ScreenUpdating = True
 
    On Error GoTo 0
End Sub
0
0 / 0 / 0
Регистрация: 05.03.2019
Сообщений: 102
16.04.2020, 17:40  [ТС] 9
Hugo121, при запуске показывает вот это
Миниатюры
Гуру exel нужно написать макрос  
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
16.04.2020, 17:42 10
Цитата Сообщение от pgpavelgr Посмотреть сообщение
не работает при вводе даты ничего нигде не меняется
подправленный вариант работал и менял, но файлы должны быть в каталоге d:\Temp\test

Добавлено через 57 секунд
Цитата Сообщение от pgpavelgr Посмотреть сообщение
при запуске показывает вот это
ну так сделайте что просит. Дату удобнее вводить через слэш, например сегодня 16/04/2020

Добавлено через 48 секунд
Хотя у меня и с точками работает. А как Вы вводили дату?
0
0 / 0 / 0
Регистрация: 05.03.2019
Сообщений: 102
16.04.2020, 18:01  [ТС] 11
Hugo121, Всё чудесно и прекрасно работает спасибооо!

Добавлено через 4 минуты
Ещё спрошу а можно вообще сделать так что бы он сам ставил любую дату по числу недели исключая выходные?
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
16.04.2020, 18:05 12
Можно. Но не понял что именно нужно.
0
0 / 0 / 0
Регистрация: 05.03.2019
Сообщений: 102
16.04.2020, 18:13  [ТС] 13
Hugo121, В прикреплённом файле справа написаны номера недель допустим 14 это четырнадцатая неделю от начала года то есть апрель. И нужно что он сам взял и вставил любую дату из 14 -й недели (кроме выходных дней в ней)
Вложения
Тип файла: xlsx лист.xlsx (13.2 Кб, 5 просмотров)
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
16.04.2020, 18:42 14
А пасха? Майские? Другие праздники?

Добавлено через 1 минуту
И вообще ещё нужен год, ну это ладно, можно брать текущий, но в начале года с этим может быть проблема если захотите прошлогодние недели видеть.

Добавлено через 10 минут
В F1 можно забить
Visual Basic
1
=(ДАТА("2020";1;)-ДЕНЬНЕД(ДАТА("2020";1;);2)+7*E1-6)+СЛУЧМЕЖДУ(0;4)
и протянуть по столбцу. И брать эту дату макросом когда генерится файл из шаблона. Только там не всюду есть недели.

Добавлено через 2 минуты
P.S. Праздники игнорируются, это сложнее и я даже и браться за них не хочу... Может у кого уже есть наработки, если их нужно учитывать.

Добавлено через 10 минут
P.P.S. Т.е. всё что мы тут выше написали - лишнее, нужно лишь чуть доработать файл и тот первый код.
0
0 / 0 / 0
Регистрация: 05.03.2019
Сообщений: 102
16.04.2020, 18:47  [ТС] 15
Hugo121, Любые дни кроме субботы и воскресенья. А можно поподробней а то я ничего не понял
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
16.04.2020, 18:58 16
Да что там подробнее, всё ведь написал: добавляете правее своих недель эту формулу, ну а в том коде (уже не помню в каком, Вам виднее теперь) дописываете ещё одну строку, в которой копируете дату на лист шаблона.

Добавлено через 5 минут
Нашёл ту тему - добавить строку
Visual Basic
1
sha.Parent.[i3] = c.Offset(, 4)
0
0 / 0 / 0
Регистрация: 05.03.2019
Сообщений: 102
16.04.2020, 18:58  [ТС] 17
Hugo121, Получилось как на скрине. Правильно? А какой код на копирование этого в другой лист?
Изображения
 
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
16.04.2020, 19:07 18
Лучший ответ Сообщение было отмечено pgpavelgr как решение

Решение

Код выше. А в столбце F поставьте ячейкам лучше формат даты какой хотите видеть, хотя использован в итоге будет формат шаблона. Наверное...

Добавлено через 6 минут
Проверил, отработало:
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
Sub tt()
    Dim s$, pth$, c As Range, ish As Object, sha As Object
 
    On Error Resume Next
    Set ish = Application.InputBox(Prompt:="Укажите любую ЯЧЕЙКУ в источнике данных", Title:="Диапазон", Type:=8)
    If ish Is Nothing Then On Error GoTo 0: Exit Sub
 
    Set sha = Application.InputBox(Prompt:="Укажите любую ЯЧЕЙКУ в шаблоне", Title:="Диапазон", Type:=8)
    If sha Is Nothing Then On Error GoTo 0: Exit Sub
    On Error GoTo 0
 
    Application.ScreenUpdating = False
 
    pth$ = sha.Parent.Parent.Path
 
    For Each c In ish.Parent.[a1].CurrentRegion.Columns(2).Cells
        s = Mid(c, 4)
        sha.Parent.[c4] = s
        sha.Parent.[c6] = c.Next
        sha.Parent.[i3] = c.Offset(, 4)
        sha.Parent.Parent.SaveAs Filename:=pth$ & "\" & c & ".xlsx", _
                                 FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
 
    Next
 
    Application.ScreenUpdating = True
 
End Sub
1
0 / 0 / 0
Регистрация: 05.03.2019
Сообщений: 102
16.04.2020, 19:22  [ТС] 19
Hugo121, Работает спасибо. Это на самом деле ещё не всё но мне дальше вас не удобно уже спрашивать. Если вы не откажете то я буду рад вашей помощи
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
16.04.2020, 19:25 20
Там в щаблоне Образец.xlsx куча возможно лишних листов, там всего их 8 штук - зачем таскать/плодить лишнее? Дату ведь только в одном листе правите, с другими данными...
0
16.04.2020, 19:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2020, 19:25
Помогаю со студенческими работами здесь

Нужно написать макрос для кнопки
Нужна помощь написать макрос для кнопки "поиск", что бы внести данные в листе"Ввод" оно сравнивала...

Нужно написать макрос к таблице, фильтрующий данные в ней
Здравствуйте, нужна ваша помощь. Нужно написать макрос к таблице, который будет также фильтровать...

Напишите макрос для Exel
Напишите макрос автозаполнения строки по диагонали для Exel

Замена в exel через макрос
День добрый столкнулся с проблеммой есть стобец с данными вида : 0.000 0.000 0.000 0.000...

Нужно написать формулу или небольшой макрос, для вас будет легко)
Вообщем для меня это сложно, для вас думаю не составит проблем составить формулу или макрос. Нужно...

Макрос поиска текста в Exel на VBA
Уважаемые Гуру! Получил сегодня просьбу в виде "Нужен совет. Мне надо макрос поиска текста в...


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

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

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