【问题标题】:Runtime Error 1004 Method "Range" of object "_Worksheet" failed运行时错误 1004 对象“_Worksheet”的方法“范围”失败
【发布时间】:2015-11-23 13:22:12
【问题描述】:

我正在尝试将许多工作表合并为一张新工作表。我真的很感激任何 cmets。

问题在于这一行:

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

【问题讨论】:

  • 感谢您的反馈。我已经尝试过了,但仍然收到相同的错误。我将修改我的问题中的代码。

标签: vba excel


【解决方案1】:

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

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

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

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我之前一直在使用代码将所有工作表合并到工作表摘要中,这是创建宏按钮的地方,效果很好。

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

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

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

    如果您删除了组合工作表,那么目的地就没有任何障碍了。

    【讨论】:

    • 感谢您的回答。我已经尝试过了,它仍然在同一行显示相同的错误。对于它可能是什么,您还有其他想法吗?
    • 此外,wsSrc.Range("A1", wsSrc.Range("D", lastRow)).Copy... 应该是 wsSrc.Range("A1", "D" &amp; lastRow).Copy ...(和号,而不是逗号)。
    • @A.S.H - 我会将其发布为答案。我被 *“我以前一直在使用 ...”所吸引,但没有意识到它应该是 &amp;wsSrc.Cells(lastRow, "D"))
    • 是的,这是一个很好的观察。我只强调 OP 必须在代码中修复许多其他问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多