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

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

01.10.2021, 13:55. Показов 614. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
малоболт
1317 / 500 / 212
Регистрация: 30.01.2020
Сообщений: 1,220
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
549 / 479 / 191
Регистрация: 11.12.2013
Сообщений: 2,499
01.10.2021, 18:59 5
попробую сделать в понедельник если никто не сделает
0
01.10.2021, 18:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2021, 18:59
Помогаю со студенческими работами здесь

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

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

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

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

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

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


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

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