2015-02-25 7 views
0

Некоторое время назад я опубликовал один и тот же вопрос, и мне сказали, что я неправильно написал листы. Я поставил вопрос; потому что я думал, что понял, что пытался называть метод ... это был мой диапазон (и да лист был записан как sheeet). Наверное, я до сих пор не понимаю. Я пытаюсь скопировать столбец «A2» через последнюю ячейку столбца «D» с листа «TEXT» в Лист3VBA EXCEL диапазон копий

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 
+0

Привет, Какую ошибку вы получаете, а также, когда вы шагаете через код какой линии она остановится? –

+0

Многие ваши вызовы в «Диапазон» не соответствуют имени листа и будут по умолчанию активным. Это будет нормально, если «ТЕКСТ» активен, но не будет работать, если какой-либо другой лист активен, когда выполняется макрос – barrowc

ответ

1

Я ответил на ваш более точный предыдущий вопрос. Это не будет работать, так как эта линия не работает, по крайней мере, 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) 
+0

Это работает, я не понял, что при создании и/или присвоении диапазона должно быть указано имя листа. – user249611

0

не вы над этим делать?

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 

(я не стал с именами листов)

+0

Я не принимал во внимание, что D может иметь пустые строки, но я уверен, что вы можете это сделать самостоятельно. –

+0

Предыдущая должность работает, меня интересует сжатый формат, который вы использовали. Я добавлю код для уникальных значений. – user249611

Смежные вопросы