Копирование определенного диапазона в другую книгу Excel - PullRequest
0 голосов
/ 01 мая 2018

Я хочу экспортировать определенный диапазон данных из одной рабочей книги в основную рабочую книгу. Я уже выяснил, как в целом копировать из одного в другое, но я хотел бы изменить мою существующую кодировку. В настоящее время макрос берет всю строку 2 из рабочей книги и копирует ее в этот мастер-файл, который прекрасно работает, однако я собираюсь сделать еще несколько вещей в мастер-файле, поэтому мне нужны только столбцы A2: HD2 для копирования и вставки в мастер лист. Ниже приводится то, что мы используем, может кто-нибудь помочь мне понять, как просто вставить A2: HD2, а не все строки 2 в мой мастер-лист?

Dim LN, Match As Integer
Dim wb As Workbook
Dim Name As String
Name = "Master sheet path here"

Application.ScreenUpdating = False

Sheets("LADB Bulk Upload").Select
LN = Range("A2").Value



Rows("2:2").Select
Selection.Copy

Set wb = Workbooks.Open(Filename:=Name)
If IsError(Application.Match(LN, ActiveSheet.Range("A:A"), 0)) Then

    Range("A100000").End(xlUp).Select
    ActiveCell.Offset(1, 0).Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Else

    Match = Application.Match(LN, wb.Sheets("Sheet1").Range("A:A"), 0)

    Cells(Match, 1).Select

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End If

Application.CutCopyMode = False

ActiveWorkbook.Save
ActiveWorkbook.Close

Application.ScreenUpdating = True

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Этот код с рефакторингом для копирования только диапазона A2:HD2 и без использования Select


Option Explicit

Public Sub CopyA2HD2()
    Dim mainWb As Workbook, mainWs As Worksheet, mainLr As Long, mainCol As Range
    Dim thisWs As Worksheet, findTxt As String, foundCell As Variant

    Set thisWs = ThisWorkbook.Worksheets("LADB Bulk Upload")    'Current file

    Application.ScreenUpdating = False
    On Error Resume Next 'Expected errors: File not found, and Sheet Name not found
    Set mainWb = Workbooks.Open(Filename:="Master sheet path here")

    If Err.Number = 0 Then    'If master file is found, and open, continue
        Set mainWs = mainWb.Worksheets("Sheet1")
        If Err.Number > 0 Then Exit Sub    'If "Sheet1" in master file is not found exit
        mainLr = mainWs.Cells(mainWs.Rows.Count, "A").End(xlUp).Row 'Last row in master
        Set mainCol = mainWs.Range(mainWs.Cells(1, "A"), mainWs.Cells(mainLr, "A"))

        findTxt = thisWs.Range("A2").Value
        foundCell = Application.Match(findTxt, mainCol, 0) 'Search column A in master

        If Not IsError(foundCell) Then                     'If text was found in master
            Set foundCell = mainWs.Cells(foundCell, "A")   'Copy A2:HD2 to same row
        Else
            Set foundCell = mainWs.Cells(mainLr + 1, "A")  'Else, copy A2:HD2 to last row
        End If

        thisWs.Range("A2:HD2").Copy
        foundCell.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
        foundCell.Select
        Application.CutCopyMode = False
        mainWb.Close SaveChanges:=True
    End If
    Application.ScreenUpdating = True
End Sub

Несколько замечаний о вашем коде

  • Как уже упоминалось, избегайте использования Select и Activate, если возможно
  • Используйте Option Explicit в верхней части каждого модуля, чтобы компилятор мог перехватывать пропущенные переменные
  • Не используйте зарезервированные ключевые слова в качестве имен переменных, чтобы избежать затенения встроенных объектов.
    • слова типа Name, Match и т. Д.
  • Используйте Long тип переменной вместо Integer
    • Согласно MSDN VBA тихо преобразует все Integers в Longs
  • Всегда обращайтесь к диапазонам явно: Rows("2:2") неявно использует ActiveSheet
    • Требуется много усилий по уходу и обслуживанию, чтобы убедиться, что ожидаемый лист активен
  • Отступ кода и правильное вертикальное пустое пространство помогут визуализировать структуру и прояснить поток
0 голосов
/ 01 мая 2018

Заменить

Rows("2:2").Select
Selection.Copy

С

Range("A2:HD2").Copy

В идеале вы должны работать с диапазонами, а не использовать Select. Вы найдете много информации об этом в другом месте. Тем не менее, если код работает и не особенно медленный, это вряд ли имеет значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...