У меня есть машина, которая выводит данные в мой исходный файл под названием «Экспортированная рабочая тетрадь». Когда я нажимаю на свой лист форматирования под названием «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. Эта проблема действительно поставила меня в тупик. Спасибо всем за любую помощь заранее. О, также, чтобы быть ясным, я не женат на этом кодексе, если это плохой способ решения этой проблемы, у меня все в порядке с чем-то другим.