Excel VBA-第一行投掷“;参数非可选“;

Excel VBA-第一行投掷“;参数非可选“;,vba,excel,Vba,Excel,我正在尝试开发一个sub,它从同一单元格中一次提取一个工作表中的数据,并将其复制到一个名为“Summary”的工作表中,然后粘贴到其中以创建一个值表。但是,我得到了错误“argumentnotoptional”,第一行突出显示为问题(带有Sub summaryassembly()的那一行),但是似乎没有理由这样做,因为不需要向子例程传递任何内容 Sub SummaryAssemble() Dim i As Integer Dim x As Integer x = S

我正在尝试开发一个sub,它从同一单元格中一次提取一个工作表中的数据,并将其复制到一个名为“Summary”的工作表中,然后粘贴到其中以创建一个值表。但是,我得到了错误“argumentnotoptional”,第一行突出显示为问题(带有Sub summaryassembly()的那一行),但是似乎没有理由这样做,因为不需要向子例程传递任何内容

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

问题其实在这方面,

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应该被引用为文字字符串,不需要为复制粘贴操作选择任何内容。最后,您混合了a和a的语法,并且不匹配;e、 g.它是
范围(“B4”)
单元格(2,i)



请参阅,了解更多摆脱依靠选择和激活来实现目标的方法。

让我在Jeeped的答案中添加一点。无论何时,只要您看到子组件在错误后高亮显示,它通常不是罪魁祸首黄色突出显示实际上并不意味着“这一行有问题。”它仅仅意味着“这是要执行的下一行代码。”或者换句话说,“这就是我停止执行程序的地方。”

在这种情况下,查找所选的或突出显示的代码(在您的案例中的范围)。这就是导致问题的原因——编译错误

在执行Sub之前,需要对其进行编译。发生这种情况时,将检查是否存在错误。某些特定类型的错误甚至不允许编译代码,因此它甚至不会开始执行


有三种主要类型的错误。语法错误是当代码没有意义时出现的。它不能被编译,因为它违反了语言的基本规则。就像说“暴躁的瓦达哈格”

然后是运行时错误。当这些词确实有意义时就会发生这种情况,甚至整个句子在语法上也可以,但在当前的上下文中,它尝试了一些无法做到的事情。比如说“把卡车顶在头上,跑一跑”这句话是行不通的


第三类错误是所有程序员最喜欢的:逻辑错误。语法正常,代码运行,没有错误消息,但出现了可怕的错误。比如:“打开窗户,走出去。”从技术上来说,这是可以做到的,但会很痛。程序员花费数小时寻找这类错误。有很多乐趣…

你有另一个叫做SummaryAssembly的函数或子函数吗?我没有。它看起来像是行范围(“B4”)。。。也会抛出一个错误。它说“应用程序定义或对象定义错误”,我错过了
范围(2,I)
的位。它应该是
单元格(2,i)
。有没有一种方法可以做同样的事情,但可以复制为值(因为它是一个“Desination”命令,所以没有粘贴值选项)?我需要它来复制公式的值。我在上面添加了一个直接值转移方法。请记住,是
单元格(,)
,它是从
范围(“B4”)
向后的(您增加的是列,而不是行)。您的意思可能是
单元格(i,2)
而不是
单元格(2,i)