VBA EXCEL диапазон копирования

Я отправил тот же вопрос некоторое время назад и мне сказали, что я записал листы неправильно. Я снял вопрос; потому что я думал, что понял, что пытаюсь вызвать метод.. это был мой диапазон (и да, лист был записан как лист). Я думаю, я до сих пор не понимаю. Я пытаюсь скопировать столбец "A2" через последнюю ячейку столбца "D" из листа "TEXT" в Sheet3

Dim TotalRows As Integer
Dim CurrentWorkbook As Workbook ' macro workbook
Dim RangeToCopy As Range
Dim ColumnLetterNumber As String

Set CurrentWorkbook = ThisWorkbook
TotalRows = Sheets("TEXT").UsedRange.Rows.Count
ColumnLetterNumber = "D" & TotalRows


Set RangeToCopy = Range("A2", ColumnLetterNumber)

' Group Last Observed within the first three columns
' Last Observed start in column N
' After Insert end up in column )

 Columns("D:D").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

' Move the Last observed (now column O) to Column D so that they can be fitered together

Sheets("TEXT").Range(Range("O1"), Range("O1").End(xlDown)).Copy Sheets("TEXT").Range("D1")

With Sheets("TEXT")
 .AutoFilterMode = False
 .Range("A1:D1").AutoFilter
End With
'
'Copy Columns to the POAM sheet
Set RangeToCopy = Range("A2", ColumnLetterNumber) 'top left, bottom right
RangeToCopy.Select
CurrentWorkbook.Sheets("Sheet3").Activate


CurrentWorkbook.Sheets("TEXT").Range(RangeToCopy).Copy Action:=xlFilterCopy, _
CopyToRange:=Sheets("Sheet3").Range("A1"), unique:=True


End Sub

2 ответа

Решение

Я ответил на ваш более подробный ранее вопрос. Это не будет работать, потому что эта строка не работает по крайней мере по двум причинам:

CurrentWorkbook.Sheets("TEXT").Range(RangeToCopy).Copy Action:=xlFilterCopy, _
    CopyToRange:=Sheets("Sheet3").Range("A1"), unique:=True

Во-первых, "RangeToCopy" не является определенным диапазоном на листе, поэтому вы не можете ссылаться на него таким образом. Это переменная в вашем коде VBA, поэтому вам просто нужно использовать функцию копирования в этом диапазоне. Во-вторых, функция копирования класса Range не имеет всех этих параметров. Ты хочешь:

RangeToCopy.Copy Destination:=Sheets("Sheet3").Range("A1")

Если вы действительно пытаетесь получить уникальные значения, то вам нужно использовать функцию "AdvancedFilter".

RangeToCopy.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Sheets("Sheet3").Range("A1"), unique:=True,  criteriarange:= <Insert range that you wish to get unique values from here> 

Кроме того, вы должны определить RangeToCopy на основе имени листа так:

Set RangeToCopy = Sheets("TEXT").Range("A2", ColumnLetterNumber)

Разве ты не закончил это делать?

Sub Macro()

    Dim dEnd As Integer

    Sheets("Sheet1").Select

    Range("D1").Select
    dEnd = Selection.End(xlDown).Row

    Range("A2:" & "D" & dEnd).Copy

    Sheets("Sheet2").Select
    Range("A1").Select
    ActiveSheet.Paste

    Application.CutCopyMode = False

End Sub

(Я не беспокоился с именами листов)

Другие вопросы по тегам