错误1004和400的VBA新手

时间:2017-08-09 16:23:06

标签: vba excel-vba runtime-error excel

请放轻松,因为我是编码的新手,并且正在努力学习如何改进团队中的流程,从而提高效率。

我已经整理了一个代码来复制公式提取的数据,然后将其作为值粘贴到同一张表中。这段代码,我已经应用于多个工作表,它们包含的工作表/标签数量各不相同。

问题#1: 我在每个文件上的第一个工作表叫做REGION。发生的事情是代码没有按照设计在“REGION”工作表上执行,但它也在它之后立即跳过工作表。

问题#2 根据我运行代码的工作簿,在6个工作表之后,我得到运行时错误'1004'并且代码停止而不在其余工作表上执行该功能

问题#3 我在工作簿上获得的错误400足够小,代码可以遍历所有工作表,而不是找到更多的工作表来应用代码。

总而言之,我需要:

1。弄清楚我在做什么错误,代码在名为REGION(第一个标签)之后立即跳过工作表

2。弄清楚如何防止错误'1004',因为程序在多个工作表上反复执行相同的功能(读取我应该设置它以保存每个选项卡以防止这个但不确定如何在循环时这样做)

3. 在代码中添加一行停止循环而不会抛出错误消息。

Sub COPYPASTE()

    Dim ws As Worksheet

    For Each ws In Sheets
    If ws.Name <> "REGION" Or ws.Name <> "Legend" Then
    Range("C3:I47").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A2").Select
    End If
    ActiveSheet.Next.Select
    Next

End Sub

再一次,编码并非我的强项,但我正在努力改善我的团队,我有2名团队成员每个月在数百个工作表上手动执行此操作,因此花费了相当多的时间。

1 个答案:

答案 0 :(得分:1)

Avoid using Select and/or Activate (and related: ActiveSheet, etc.)虽然我们在此而不是Copy/PasteSpecial,但只需使用范围Value属性进行直接值分配。

这样:

Dim ws As Worksheet

For Each ws In Sheets
If ws.Name <> "REGION" Or ws.Name <> "Legend" Then
Range("C3:I47").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("A2").Select
End If
ActiveSheet.Next.Select
Next

成为这个(还要注意Or应该是And,我认为)

Dim ws As Worksheet
Dim rng as Range
For Each ws In Sheets
    'Do not operate on either of Region or Legend worksheets
    If ws.Name <> "REGION" And ws.Name <> "Legend" Then
        Set rng = ws.Range("C3:I47")
        rng.Value = rng.Value2
    End If
Next