2014-09-29 3 views
-1

Я работаю над макросом, который обновит таблицу Excel из другой информации о листе. Но при обновлении я хочу переместить два столбца на передний план, потому что я не хочу, чтобы они менялись. Все работает до такой степени, что я перемещаю два столбца спереди. Я выбираю их, вырезаю их и вставляю, но по какой-то причине сразу после того, как паста происходит, он выдает ошибку, заявив, что вставка не удалась (ошибка 1004-PasteSpecial метода класса Range не удалась). Я очень смущен, почему это происходит, и любая помощь будет очень признательна.Excel update macro

Sub crossUpdate() 

Dim rng1 As Range, rng2 As Range, rng1Row As Range, rng2Row As Range, Key As Range, match As Integer 
Dim wb1 As Workbook 
Dim wb2 As Workbook 

Set wb1 = Workbooks("011 High Level Task List v2.xlsm") 
Set wb2 = Workbooks("011 High Level Task List v2 ESI.xlsm") 

'Unfilter and Unhide both sheets 
With wb1.Sheets("Development Priority List") 
.Cells.EntireColumn.Hidden = False 
.Cells.EntireRow.Hidden = False 
.AutoFilterMode = False 
End With 
With wb2.Sheets("Development Priority List") 
.Cells.EntireColumn.Hidden = False 
.Cells.EntireRow.Hidden = False 
.AutoFilterMode = False 
End With 

'Copy and paste original sheet to new temp sheet 
wb1.Sheets("Development Priority List").Activate 
wb1.Sheets("Development Priority List").Cells.Select 
Selection.Copy 
Sheets.Add.Name = "SourceData" 
wb1.Sheets("SourceData").Paste 

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

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

'Dev columns moved on update sheet 
With wb2.Sheets("Development Priority List") 
.Columns("F:G").Cut 
.Columns("A:B").Insert Shift:=xlToRight 
.Activate 
.Columns("A:B").Select 
End With 
Selection.PasteSpecial  <------ Line that throws error 
End Sub 
+3

это уже ответил в другой один из ваших постов. Вернитесь назад и посмотрите на него. Когда вы делаете .activate, вы теряете свой выбор/буфер обмена. – Sorceri

+0

Так что я просто удаляю .activate? –

+0

После строки .Insert добавьте строку, подобную этой: .Columns («A: B»). Копировать Это должно исправить вашу проблему. См. Ответы на этот вопрос (один из ваших): http://stackoverflow.com/questions/26065376/vba-copy-and-paste-macro – Daniel

ответ

0

Изменить блок кода как такового:

With wb2.Sheets("Development Priority List") 
    .Columns("A:B").Insert Shift:=xlToRight 
    .Columns("H:I").Cut 
    .Range("A1").PasteSpecial 
End With