运行时错误1004对象“_Worksheet”的方法“范围”失败

时间:2015-11-22 23:50:36

标签: excel vba excel-vba

我正在尝试将多张纸张合并为一张新纸张。我真的很感激任何评论。

问题在于:

wsSrc.Range("A1", wsSrc.Range("D", lastRow)).Copy Destination:=rngDest 

当我尝试运行它时会导致错误。我以前一直在使用代码将所有工作表组合到工作表摘要中,这是创建宏的按钮的工作正常。

Sub mcrCombine()

ActiveWorkbook.Sheets.Add.Name = "Combined" 'Create new sheet

'Definitions
Dim wsSrc As Worksheet
Dim wsDest As Worksheet
Dim rngDest As Range
Dim lastRow As Long
Dim destRow As Long
Set wsDest = Worksheets("Combined") 'Destination sheet in same Workbook
Set rngDest = wsDest.Range("B1") 'Destination cell in Combined
Application.DisplayAlerts = False 'suppress prompt worksheet delete

'loop through all sheets
For Each wsSrc In ThisWorkbook.Sheets
    If wsSrc.Name <> "Summary" And wsSrc.Name <> "Combined" Then 'all sheets except summary
        lastRow = wsSrc.Cells.SpecialCells(xlCellTypeLastCell).Row 'define     last row
        wsSrc.Range("A1", wsSrc.Range("D", lastRow)).Copy Destination:=rngDest 'copy and paste data in range
        Set rngDest = rngDest.Offset(lastRow - 1) 'update destination range
        wsSrc.Delete 'delete source file
    End If
Next
Application.DisplayAlerts = True 'prompts back on
End Sub

2 个答案:

答案 0 :(得分:1)

好的,我不确定这会让你的代码实现它应该做的所有事情,但是因为你纠正了@Jeeped所指出的问题并在这一行中指明了你的问题:

  

wsSrc.Range("A1", wsSrc.Range("D", lastRow)).Copy Destination:=rngDest

此行中的错误是因为逗号而不是&符号。你应该把它改成:

wsSrc.Range("A1", "D" & lastRow).Copy Destination:=rngDest

希望这有帮助。

答案 1 :(得分:0)

  

我之前一直在使用代码将所有工作表组合到工作表摘要中,这是创建宏的按钮,工作正常。

这是发生了什么的线索。在循环浏览工作簿中的每个工作表时,请注意不要处理摘要工作表;可能是因为a)它已经保存了来自其他工作表的汇总信息,并且b)您不希望将其与其他已处理的工作表一起删除。

如果您已将中央位置更改为合并工作表,则必须在工作表中包含该工作表才能跳过。如果未跳过合并工作表,则a)将其内容复制到自身之上,并b)删除合并工作表。

If wsSrc.Name <> "Summary" And wsSrc.Name <> "Combined" Then

如果您删除合并工作表,那么目的地方式就没有了。