С Новым годом! Форум программистов, компьютерный форум, киберфорум
MS Office Excel
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.10.2021
Сообщений: 4
1

Макрос для переноса данных из одного документа Excel в другой

01.10.2021, 13:55. Показов 627. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Есть 2 системы которые формируют отчеты ("Отчет1.xls", "Отчет2.xls") прихода\ухода на работу. Необходимо с помощью макроса переносить данные (время прихода\ухода) с привязками к дате и ФИО в другой документ excel (табель рабочего времени за месяц "Учет рабочего времени.xlsm"). Для одного из отчетов "Отчет1.xls" есть готовый макрос. Проблема состоит в макросе для "Отчет2.xls" на сколько я понял из-за того что столбец Даты в отчете в формате "Дата", а при изменении формата на "Текстовый" вместо 01.09.2021 появляется 44440. Можете помочь с кодом макроса для переноса данных из "Отчет2.xls" в "Учет рабочего времени.xlsm"

Код
Option Explicit  
   
Const SKUD_XLSX = "Отчет1.xls"  
Const TABL_XLSX = "Учет рабочего времени.xlsx"  
   
Sub СКУДвТабель()  
    Dim wbS As Workbook  
    Dim wbT As Workbook  
    On Error Resume Next  
    Set wbS = Workbooks("Отчет1.xls")  
    Set wbT = Workbooks("Учет рабочего времени.xlsx")  
    On Error GoTo 0  
    If wbS Is Nothing Then  
        MsgBox "Не найден файл " & SKUD_XLSX, vbInformation  
    Else  
        If wbT Is Nothing Then  
            MsgBox "Не найден файл " & TABL_XLSX, vbInformation  
        Else  
            Dim arrSkud As Variant  
            arrSkud = GetArrSkud(wbS.Sheets(1))  
               
            Dim dicY As Object  
            Dim dicX As Object  
            GetDic wbT.Sheets(1), dicY, dicX  
               
            PrintResult wbT.Sheets(1), wbS.Sheets(1), arrSkud, dicY, dicX  
        End If  
    End If  
End Sub  
   
Sub PrintResult(sh As Worksheet, shSKUD As Worksheet, arrSkud As Variant, dicY As Object, dicX As Object)  
    Dim Application_Calculation As Long  
    Application_Calculation = Application.Calculation  
    Application.Calculation = xlCalculationManual  
    Application.EnableEvents = False  
    With sh  
        Dim rep As Variant  
        ReDim rep(1 To UBound(arrSkud, 1), 1 To 1)  
           
        Dim i As Byte  
        Dim x As Integer  
        Dim y As Long  
        Dim ySkud As Long  
        For ySkud = 1 To UBound(arrSkud, 1)  
            If arrSkud(ySkud, 1) <> "" Then  
                rep(ySkud, 1) = "-"  
                If dicY.Exists(arrSkud(ySkud, 1)) Then  
                    If dicX.Exists(arrSkud(ySkud, 2)) Then  
                        rep(ySkud, 1) = "+"  
                        y = dicY.Item(arrSkud(ySkud, 1))  
                        x = dicX.Item(arrSkud(ySkud, 2))  
                        For i = 0 To 1  
                            If arrSkud(ySkud, 5 + i) <> "" Then  
                                .Cells(y, x + i).Value = arrSkud(ySkud, 5 + i)  
                            End If  
                        Next  
                    End If  
                End If  
            End If  
        Next  
    End With  
       
    shSKUD.Cells(1, 15).Resize(UBound(rep, 1), UBound(rep, 2)) = rep  
    Application.EnableEvents = True  
    Application.Calculation = Application_Calculation  
End Sub  
   
Function GetArrSkud(sh As Worksheet)  
    With sh  
        Dim arr As Variant  
        Dim y As Long  
        y = .Cells(.Rows.Count, 3).End(xlUp).Row  
        GetArrSkud = .Range(.Cells(1, 3), .Cells(.Cells(.Rows.Count, 3).End(xlUp).Row, 8))  
    End With  
End Function  
   
Sub GetDic(sh As Worksheet, dicY As Object, dicX As Object)  
    With sh  
        Dim arr As Variant  
        Dim y As Long  
           
        y = .Cells(.Rows.Count, 2).End(xlUp).Row  
        arr = .Range(.Cells(1, 2), .Cells(y, 2 - (y = 1)))  
        Set dicY = CreateObject("Scripting.Dictionary")  
        For y = 1 To UBound(arr, 1)  
            Select Case arr(y, 1)  
            Case "", "ФИО"  
            Case Else  
                dicY.Item(arr(y, 1)) = y  
            End Select  
        Next  
           
        y = .Cells(2, .Columns.Count).End(xlToLeft).Column  
        arr = .Range(.Cells(2, 1), .Cells(2 - (y = 1), y))  
        Set dicX = CreateObject("Scripting.Dictionary")  
        For y = 1 To UBound(arr, 2)  
            Select Case arr(1, y)  
            Case "", "№ п/п", "ФИО", "Отдел"  
            Case Else  
                dicX.Item(CStr(arr(1, y))) = y  
            End Select  
        Next  
    End With  
End Sub
Сами документы https://fex.net/ru/s/07prpkx
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.10.2021, 13:55
Ответы с готовыми решениями:

Макрос для переноса данных из одного Excel в другой Excel файл
Уважаемые эксперты, очень нужна ваша помощь! Подскажите, пожалуйста, как прописать макрос, который...

Нужен макрос для переноса данных с одного файла excel в другой
Помогите пожалуйста Нужен макрос с кнопкой для переноса данных с одного файла excel в другой, ...

Макрос переноса данных из одного документа в другой
Привет всем и каждому в отдельности) Активно думаю(и работаю) над переносом данных из &quot;Графика&quot;...

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

Макрос для переноса данных с одного файла в другой
Уважаемые эксперты, нужно Ваша помощь, очень:( Суть такова есть файл, в котором 2 эксель файла, а...

4
0 / 0 / 0
Регистрация: 01.10.2021
Сообщений: 4
01.10.2021, 14:03  [ТС] 2
Не сразу нашел вложения
Вложения
Тип файла: zip excel2.zip (90.1 Кб, 8 просмотров)
0
малоболт
1324 / 507 / 212
Регистрация: 30.01.2020
Сообщений: 1,231
01.10.2021, 15:35 3
utpvlad, дело в том, что MS Office хранит дату в ячейке в виде числа дней, прошедших с 31/12/1899. Соответственно, если в какую-то ячейку вбить дату, а потом поменять формат этой ячейки на Числовой или Текстовый, значение в ячейке предстанет в своём истинном обличии - просто число.
Если дату скопировать и вставить в ячейку с форматом отличным от формата Дата (например Общий, стоящий по умолчанию), то вполне вероятно увидеть в ячейке не дату, а то самое число дней.
Для того, чтобы это не происходило, нужно самому, перед вставкой даты, поменять формат отображения ячейки именно на дату, и только потом вставлять в неё.
Либо, если нужно, чтобы в ячейке отображались текстовое значение, а вам надо туда вставить дату, надо воспользоваться функцией Cstr(дата).
0
0 / 0 / 0
Регистрация: 01.10.2021
Сообщений: 4
01.10.2021, 17:20  [ТС] 4
Этот Отчет1 с таким форматом столбца даты "Дата" формирует WorkTime Server, в то время как с ZKAccess Отчет2 с форматом столбца даты "Общий" и на сколько я понял именно в этом заключается проблема не работы данного макроса написанного для переноса данных с отчета ZKAccess. Может есть вариант переноса данных не с Excel а с Word документа?
0
552 / 482 / 191
Регистрация: 11.12.2013
Сообщений: 2,500
01.10.2021, 18:59 5
попробую сделать в понедельник если никто не сделает
0
01.10.2021, 18:59
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.10.2021, 18:59
Помогаю со студенческими работами здесь

Макрос для переноса (с удалением) данных с одного листа на другой при появлении дополнительных данных в ячейке
Уважаемые форумчане, доброго дня. Прошу помочь по следующему вопросу: Во вложении файл Excel,...

Очень нужен макрос для переноса данных из одного файла в другой, с поиском значений
Уважаемые эксперты, очень нужна ваша помощь! Подскажите, пожалуйста, как прописать макрос, который...

Макрос для выборочного переноса из одного листа в другой
Здраствуйте! Так уж сложилось, что я не владею языками (программирования), но хорошо разбираюсь в...

Макрос для переноса данных из Excel в Word
Добрый день. В Excel файле есть таблица (Фамилия, Отчество, Имя). Из пяти(не важно) заполненных...

Макрос для переноса данных из Excel в Word
Здравствуйте! Помогите разобраться Необходимо написать макрос, который по месту в рейтинге в...

Макрос для переноса данных в виде таблицы из Excel в Word
Добрый день, помогите пожалуйста довести до ума макрос , который бы экспортировал определенные...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по 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++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru