VBA копирует столбцы из исходного листа в определенное место на активном листе с одними и теми же заголовками - PullRequest
0 голосов
/ 31 мая 2019

У меня есть машина, которая выводит данные в мой исходный файл под названием «Экспортированная рабочая тетрадь». Когда я нажимаю на свой лист форматирования под названием «Sheet1», который запускает несколько файлов VBA, он сначала очищает все данные, кроме заголовков в «Sheet1». Я хочу, чтобы затем на листе «Экспортированная рабочая тетрадь» был найден заголовок, найденный на листе «Лист1», скопируйте столбец, связанный с этим заголовком, а затем перейдите на «Лист1», найдите заголовок с тем же именем и вставьте информацию. Поскольку в «Sheet1» содержится много другого кода, мне нужны данные в определенном месте. Например, в столбцах «Экспортированная рабочая тетрадь» и «Лист1» A всегда будет копироваться в столбец А с заголовком «Список образцов», но данные, которые необходимо поместить в столбец Q на «Лист1», иногда будут находиться в столбце С, E или Q на листе «Экспортированная рабочая тетрадь», но заголовок на обоих листах будет одинаковым независимо от столбца. Наконец, я хочу, чтобы столбцы оставались пустыми, если совпадений не найдено.

У меня нет опыта работы с VBA, однако я пытался манипулировать многими, многими, многими кодами, связанными с этой темой, с некоторым успехом, но мне все еще не хватает моей цели. Это означает, что, скорее всего, ответ есть, но я не достаточно хорош в VBA, чтобы правильно им манипулировать. Приведенный ниже код приближает меня к желаемому результату, однако, когда заголовки в «Экспортированной рабочей тетради» не совпадают по имени с заголовками в «Листе 1», происходит сбой. Кроме того, извините, если код не отформатирован в желаемом стиле, я приложил все усилия, чтобы быть новичком в VBA и на форуме. Если это поможет, это мои имена столбцов в «Sheet1»: «Список образцов», «60Ni», «65Cu», «66Zn», «75As», «82Se», «111Cd», «205Tl», «208Pb»

Option Explicit
Sub FindandCopy()

Rows("2:" & Rows.Count).ClearContents
     Dim Rng As Range, c As Range
     Dim sCell As Range
     Dim rSize As Long
     Dim dest As Range
     Dim lDestRow As Long
     Dim i As Integer

    Sheets("Sheet1").Select
        i = 0
        Set Rng = Range([A1], [R1])
For Each c In Rng
        Set sCell = Sheets("Exported Labbook").Range("1:1").Find(What:=c.Value, LookIn:=xlValues, LookAt:=xlWhole)
        rSize = Sheets("Exported Labbook").Range(sCell.Offset(1, 0), sCell.End(xlDown)).SpecialCells(xlCellTypeVisible).Cells.Count
    If c.Offset(1, 0).Value <> "" Then
        Set dest = c.End(xlDown).Offset(1, 0)
             If i = 0 Then
             lDestRow = dest.Row
             End If

             If dest.Row < lDestRow Then
             Set dest = Cells(lDestRow, dest.Column)
             End If

        Sheets("Exported Labbook").Range(sCell.Offset(1, 0), sCell.End(xlDown)).SpecialCells(xlCellTypeVisible).Copy
        dest.Select
        ActiveSheet.Paste
    Else
        Range(sCell.Offset(1, 0), sCell.End(xlDown)).SpecialCells(xlCellTypeVisible).Copy
        Set dest = c.Offset(1, 0)

             If dest.Row < lDestRow Then
             Set dest = Cells(lDestRow, dest.Column)
             End If

        dest.Select
        ActiveSheet.Paste
    End If
    i = i + 1
Next
End Sub

Если заголовки на обоих листах совпадают, это будет именно то, что я хочу, даже если они в другом порядке. Если их нет, например, если некоторые из них отсутствуют на листе «Экспортированная рабочая тетрадь», я получаю ошибку Ошибка выполнения «91»: переменная объекта или переменная блока не установлены. Когда это происходит, отладка указывает на строку, которая начинается rSize = Sheets. Эта проблема действительно поставила меня в тупик. Спасибо всем за любую помощь заранее. О, также, чтобы быть ясным, я не женат на этом кодексе, если это плохой способ решения этой проблемы, у меня все в порядке с чем-то другим.

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