Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Excel更新宏_Vba_Excel - Fatal编程技术网

Vba Excel更新宏

Vba Excel更新宏,vba,excel,Vba,Excel,我正在处理一个宏,该宏将从另一张表格信息更新excel电子表格。但是,当更新时,我想将两列移到前面,因为我不希望它们改变。直到我把两根柱子移到前面为止,一切都正常。我选择它们,剪切它们并粘贴它们,但由于某种原因,粘贴发生后,它立即抛出一个错误,表示粘贴失败(错误1004 PasteSpecial method of Range类失败)。我很困惑为什么会发生这种情况,任何帮助都将不胜感激 Sub crossUpdate() Dim rng1 As Range, rng2 As Range, rn

我正在处理一个宏,该宏将从另一张表格信息更新excel电子表格。但是,当更新时,我想将两列移到前面,因为我不希望它们改变。直到我把两根柱子移到前面为止,一切都正常。我选择它们,剪切它们并粘贴它们,但由于某种原因,粘贴发生后,它立即抛出一个错误,表示粘贴失败(错误1004 PasteSpecial method of Range类失败)。我很困惑为什么会发生这种情况,任何帮助都将不胜感激

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
子交叉更新()
Dim rng1作为范围,rng2作为范围,rng1 ROW作为范围,rng2Row作为范围,键作为范围,匹配作为整数
将wb1设置为工作簿
将wb2设置为工作簿
设置wb1=工作簿(“011高级任务列表v2.xlsm”)
设置wb2=工作簿(“011高级任务列表v2 ESI.xlsm”)
'取消过滤并取消隐藏两张纸
附wb1.表(“开发优先级列表”)
.Cells.EntireColumn.Hidden=假
.Cells.EntireRow.Hidden=False
.AutoFilterMode=False
以
附wb2.表格(“开发优先权清单”)
.Cells.EntireColumn.Hidden=假
.Cells.EntireRow.Hidden=False
.AutoFilterMode=False
以
'将原始工作表复制并粘贴到新的临时工作表
wb1.工作表(“开发优先级列表”)。激活
wb1.表格(“开发优先级列表”).单元格.选择
选择,复制
Sheets.Add.Name=“SourceData”
wb1.工作表(“源数据”).粘贴
'按键对临时工作表排序
N=单元格(Rows.Count,“A”)。结束(xlUp)。行
设置rng1=wb1.Sheets(“SourceData”).Cells.Range(“A2:A”和“N”)
设置rng1Row=rng1.EntireRow
rng1Row.Sort Key1:=工作表(“源数据”).Range(“A1”)
'更新按键排序的工作表
N=单元格(Rows.Count,“A”)。结束(xlUp)。行
设置rng2=wb2.Sheets(“开发优先级列表”).Cells.Range(“A2:A”和“N”)
设置rng2Row=rng2.EntireRow
rng2Row.Sort键1:=wb2.Sheets(“开发优先级列表”).Range(“A1”)
'在更新表上移动了开发人员列
附wb2.表格(“开发优先权清单”)
.立柱(“F:G”).切割
.列(“A:B”)。插入移位:=xlToRight
.激活
.列(“A:B”)。选择
以

Selection.PasteSpecial更改代码块如下:

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

这已经在你的另一篇帖子中得到了回答。回去看看。当您执行.activate操作时,您将丢失选择/剪贴板。因此,我只需删除.Insert行之后的.activate?,然后添加一行,如下所示:.Columns(“a:B”)。复制,这将解决您的问题。请参见此问题(您的问题之一)中的答案: