Excel VBA - 第一行出现“参数不可选”错误

3

我正在尝试开发一个子程序,该子程序逐个工作表从同一单元格中提取数据,并将其复制到名为“Summary”的工作表中,并将其粘贴以创建值表。 但是,我收到了“参数不可选”的错误,并突出显示第一行(其中有Sub SummaryAssemble()),但似乎没有理由,因为不需要将任何内容传递给子程序。

Sub SummaryAssemble()

    Dim i As Integer

    Dim x As Integer

    x = Sheets.Count


    For i = 3 To x Step 1

    Sheets(i).Activate
        ' Copy and paste the value into sheet where A
        ' Range.Select($A
        ' First copy value for ATRT 2014 (cell B4)
       Range.Select ("B4")
       Selection.Copy
       Sheets(Summary).Activate
       ' Select Column B Row i (2, i)
       Range(2, i).Select
       ActiveCell.Paste

       Sheets(i).Activate

        Sheets(ActiveSheet.Index + 1).Activate
    Next i
End Sub

1
你有另一个被称为SummaryAssemble的函数或子程序吗? - Scott Craner
我不知道你想要翻译什么内容,请提供更多信息。 - camelCaseCowboy
2个回答

6

问题实际上在这一行代码中,

Range.Select ("B4")

应该更接近于,

Range("B4").Select

其他几个问题:
Sub SummaryAssemble()
    Dim i As Long, x As Long

    x = Sheets.Count

    For i = 3 To x Step 1
          ' Copy and paste the value into sheet where A
          ' First copy value for ATRT 2014 (cell B4)
        Sheets(i).Range("B4").Copy _
                Destination:=Sheets("Summary").Cells(2, i)
        'or as a direct value transfer (PasteSpecial Paste:=xlvalues)
        'Sheets("Summary").Cells(2, i) = Sheets(i).Range("B4").Value
    Next i
End Sub

我相信你使用的 Summary 应该被引用为一个字符串,没有必要选择东西进行复制和粘贴操作。 最后,你混合和搭配了 Range对象 Range.Cells属性的语法; 例如 Range("B4")Cells(2,i)

请查看如何避免在Excel VBA宏中使用Select以获取更多不依赖select和activate来实现您目标的方法。


看起来 Range("B4") 这一行也出现了错误。它显示为“应用程序定义或对象定义错误”。 - camelCaseCowboy
我错过了 Range(2, i) 这一部分。应该是 Cells(2, i) - user4039065
有没有一种方法可以复制值而不是公式(因为它是“目的地”命令,所以没有“粘贴值”选项)?我需要将一个公式的值复制过去。 - camelCaseCowboy
1
我已经添加了一个直接值传递的方法。请记住,Range.Cells 属性Cells(<row_number>, <column_number>),与 Range("B4") 相比是有点相反的(你在增加列而不是行)。可能你想要的是 Cells(i, 2) 而不是 Cells(2, i) - user4039065

5
让我在Jeeped的回答中补充一件事情。每当您看到错误后,子程序被突出显示时,通常它并不是罪魁祸首。黄色突出显示实际上并不意味着“此行存在问题”。它只是意味着“这是要执行的下一行代码。”或者换句话说,“这是我停止执行程序的地方。”

Compile error highlights

在这种情况下,寻找选定的或突出显示的代码(在您的情况下为范围)。那是导致问题的代码 - 编译错误。

Compile error message

在执行子程序之前,需要对其进行编译。在此过程中,会检查是否存在错误。某些特定类型的错误甚至会阻止代码被编译,因此它甚至不会开始执行。


有三种主要类型的错误。 语法错误 是指代码没有意义。它无法编译,因为它违反了语言的基本规则。就像说“Grumblutty wadahargs”。
然后是运行时错误。当单词确实有意义时,甚至整个句子在语法上都没问题,但在当前情况下尝试做一些无法完成的事情时会发生这种情况。比如说“把卡车放在头上跑步”。不可能成功。
第三种错误是所有程序员最喜欢的: 逻辑错误。语法正确,代码运行,没有错误消息,但某些事情出了大问题。比如:“打开窗户并走出去”。从技术上讲,这是可以做到的,但会很疼。程序员花费数小时来寻找此类错误。非常有趣...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接