2014-09-26 9 views
1

Я разрабатываю макрос, который будет копировать и сортировать данные с помощью ключа, а затем вставлять 2 столбца перед обоими листами в vba. Я начал писать код, и он работал хорошо до сих пор, но когда я пытаюсь вставить 2 столбца, он дает мне ошибку Select method of Range class failed в строке: Sheet2.Columns("A:A").Select Я смущен, почему это происходит. Любая помощь будет принята с благодарностью.Excel vba sorting macro

Sub crossUpdate() 

Dim rng1 As Range, rng2 As Range, rng1Row As Range, rng2Row As Range, Key As Range, match As Integer 


'Unhide and Unfilter columns and rows on original sheet 
Sheet1.Cells.EntireColumn.Hidden = False 
Sheet1.Cells.EntireRow.Hidden = False 
Sheet1.Cells.AutoFilter 

'Copy and paste original sheet to new temp sheet 
Sheet1.Cells.Select 
Selection.Copy 
Sheets.Add.Name = "SourceData" 
ActiveSheet.Paste 
Range("A1").Select 

'Sort temp sheet by key 
N = Cells(Rows.Count, "A").End(xlUp).row 
Set rng1 = Sheets("SourceData").Cells.Range("A2:A" & N) 
Set rng1Row = rng1.EntireRow 
rng1Row.Sort Key1:=Sheets("SourceData").Range("A1") 



'Unhide and Unfilter columns and rows on original sheet 
Sheet2.Cells.EntireColumn.Hidden = False 
Sheet2.Cells.EntireRow.Hidden = False 
Sheet2.Cells.AutoFilter 

'Update sheet sorted by key 
N = Cells(Rows.Count, "A").End(xlUp).row 
Set rng2 = Sheets("Sheet2").Cells.Range("A2:A" & N) 
Set rng2Row = rng2.EntireRow 
rng2Row.Sort Key1:=Sheets("Sheet2").Range("A1") 


Sheet2.Columns("A:A").Select 
Selection.Insert Shift:=xlToRight 
Sheets("SourceData").Columns("A:A").Select 
Selection.Insert Shift:=xlToRight 

End Sub 

ответ

2

Я думаю, это потому, что вы используете Select на другом листе, чем активный.

Одно решение сделать:

Sheet2.Select 
Sheet2.Columns("A:A").Select 

Другим решением является не использовать выбора вообще (что почти всегда лучше)

Sheet2.Columns("A:A").Insert Shift:=xlToRight