Excel VBA копирует отфильтрованные видимые ячейки CurrentRegion, но исключает последние 3 столбца - PullRequest
0 голосов
/ 08 ноября 2019

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

Это работает хорошо, за исключением того, что копирует все видимые данные (столбцы AN), когда я действительно хочу скопировать столбцы от A до K (так как от L до N на листе вставки у меня есть формулы, которые устанавливают ссылочные номера и, следовательно,не может быть вставлен).

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

Есть мысли?

лист, который копируется - DbExtract sheet that is being copied - DbExtract Лист, в который вставляются данные - DuplicateRecords enter image description here Спасибо.

Sub UpdateInputWithExisting()

' Other code that works using set with values and active cell offset with values for other sheets

Sheets("TK_Register").Range("A1").CurrentRegion.AutoFilter field:=12, Criteria1:=RefID

Dim DbExtract, DuplicateRecords As Worksheet
Set DbExtract = ThisWorkbook.Sheets("TK_Register")
Set DuplicateRecords = ThisWorkbook.Sheets("EditEx")

DbExtract.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).copy
DuplicateRecords.Cells(31, 3).PasteSpecial xlPasteValues
On Error Resume Next
Sheets("TK_Register").ShowAllData
On Error GoTo 0

ActiveWorkbook.RefreshAll
Sheets("EditEx").Select
ActiveWindow.SmallScroll Down:=-120
Range("B14:M14").Select

MsgBox ("Record Retrieved. Make your changes and ensure you click 'Save Changes' to update the Master Registers")

End Sub

1 Ответ

0 голосов
/ 08 ноября 2019

Нужно использовать .Resize метод. Замените эту строку:

DbExtract.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).copy

На эту:

With DbExtract.Range("A1").CurrentRegion
    .Resize(, .Columns.Count - 3).SpecialCells(xlCellTypeVisible).Copy
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...