Страницы: 1
RSS
Макрос на копирование данных из другого файла, Макрос уже нашел, не знаю как адаптировать под себя
 
Добрый вечер.
Необходимо в базу копировать данные из россыпи отчетов. Отчеты все идентичные по структуре. Нашел макрос похожий, но он копирует в новую строку, а мне надо что бы копировал в ту строку, где в данный момент выделена ячейка. В выделенную ячейку так же должно копироваться значение. И еще, не знаю как изменить выбор что и куда копируется, что бы выбрать откуда именно из отчета и куда именно в базу должно вставляться значение.

Макрос:
Код
Option Explicit

Sub Кнопка10_Щелкнуть()
Dim FD As FileDialog
Dim ItogWb As Workbook
Dim ItogWsh As Worksheet
Dim iFileName As String
Dim iShortFileName As String
Dim iLastRow As Long
    
    Set FD = Application.FileDialog(msoFileDialogFilePicker)
    With FD
        .Filters.Clear  'удаляет предопределенные фильтры
        .Filters.Add "Microsoft Excel files", "*.xls"
        .Filters.Add "All files", "*.*"
        .AllowMultiSelect = False   'если True-то выбор нескольких файлов
        .InitialFileName = ThisWorkbook.Path
        .Title = "Открытие документа с исходными данными"
        .ButtonName = "Открыть"
        If .Show = False Then
            MsgBox "Вы не указали нужный файл!", 48, "Ошибка"
            Exit Sub
        Else
        iFileName = .SelectedItems(1)
        iShortFileName = Right(.SelectedItems(1), Len(.SelectedItems(1)) _
- InStrRev(.SelectedItems(1), "\"))
            'If Right(UCase(iFileName), 4) = ".XLS" Then iFileName = Left(iFileName, Len(iFileName) - 4)
        End If
    End With
    Set FD = Nothing
    
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
        iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
    
    Set ItogWb = Workbooks.Open(Filename:=iFileName, UpdateLinks:=False, _
                                                        ReadOnly:=True)
    Set ItogWsh = ItogWb.Worksheets("Лист1")
    ThisWorkbook.Activate
    With ItogWsh
        Cells(iLastRow + 1, 1) = Cells(iLastRow, 1).Value + 1
        Cells(iLastRow + 1, 2).Value = .Cells(5, 17)
        Cells(iLastRow + 1, 3) = .Cells(5, 32)
        Cells(iLastRow + 1, 4) = .Cells(1, 38) & .Cells(1, 43) & .Cells(2, 43)
        Cells(iLastRow + 1, 5) = .Cells(5, 7)
        Cells(iLastRow + 1, 6) = .Cells(5, 10)
        Cells(iLastRow + 1, 7) = .Cells(5, 46)
        Cells(iLastRow + 1,  = .Cells(1, 48)
        Cells(iLastRow + 1, 9) = .Cells(30, 6)
       
    End With
    ItogWb.Close SaveChanges:=False
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

End Sub
Изменено: GertiyMV - 14.08.2018 16:53:38
 
GertiyMV, оформите код по правилам. Используйте кнопку  <...>. Приложите файл-пример: для базы и для отчета. И тогда, возможно, Вам помогут.
 
arty_om, без проблем. теперь все ок.
похоже откуда и куда я разобрался. это Cells(iLastRow + 1, 3) = .Cells(5, 32) в формате R1C1?
только зачем в некоторых строках вставляется Value?
а вот как сделать что бы информация копировалась не в новую строку а туда где курсор я не понял.
 
GertiyMV, у Вас в коде жестко указано, куда вставлять значения.
Т.е. сначала идет поиск номера последней строки (iLastRow).
Затем он вставляет в следующу строчку (iLastRow+1) данные.
Чтобы вставлять данные в выбранную ячейку, используйте Selection.

Вместо
Код
iLastRow = Cells(Rows.Count, 2).End(xlUp).Row

Используйте
Код
iLastRow = Selection.Row
Изменено: arty_om - 14.08.2018 17:10:55
 
arty_om, и что бы он мне вставлял не под выделенную строку а в эту строку изменить +1 на +0?
Код
Cells(iLastRow + 0, 2) = .Cells(5, 17)
 
GertiyMV, ой, точно!) Забыл...

Просто уберите +1.
 
Какой смысл прибавлять ноль? )
Код
rw = ActiveCell.Row
With ItogWsh
    Cells(rw, 1) = ...

P.S. У Вас в строке 49 ошибка в указании адреса ячейки - нет номера столбца.
 
arty_om, спасибо, с +0 тоже работает хорошо) - исправлю

Юрий М, Cells(rw, 1) ставим вместо Cells(iLastRow + 0, 1), правильно?

коллеги, еще вопрос, .Cells(1, 38) & .Cells(1, 43) складывает значения из двух ячеек, а как между ними поставить тире, по принципу формулы? .Cells(1, 38) & "-" & .Cells(1, 43) так?
 
Цитата
GertiyMV написал:
Cells(rw, 1) ставим вместо Cells(iLastRow + 0, 1), правильно?
Правильно, только не забудьте определить значение переменной rw.
Цитата
GertiyMV написал:
, .Cells(1, 38) & .Cells(1, 43) складывает значения из двух ячеек
Не "складывает", а сцепляет. Для сложения используйте плюсик:
.Cells(1, 38) + .Cells(1, 43)
Про тире: а проверить нет возможности?
Страницы: 1
Наверх