Excel VBA - 第一行投掷"Argument not optional"

cam*_*boy 3 excel vba excel-vba

我正在尝试开发一个sub,它一次从同一个单元格中提取数据,并将其复制到名为"Summary"的工作表并粘贴到其中以创建值表.但是,我收到错误"Argument not optional"并且第一行被突出显示为问题(具有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
Run Code Online (Sandbox Code Playgroud)

小智 6

问题实际上在这一行,

Range.Select ("B4")
Run Code Online (Sandbox Code Playgroud)

它应该更接近,

Range("B4").Select
Run Code Online (Sandbox Code Playgroud)

其他几个问题

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
Run Code Online (Sandbox Code Playgroud)

我相信您对Summary的使用应该被引用为文字字符串,并且不需要为复制和粘贴操作选择一些内容.最后,您正在混合和不匹配Range对象Range.Cells属性的语法; 例如它是Range("B4")Cells(2, i).


请参阅如何避免在Excel VBA宏中使用Select以获取更多方法,以避免依赖select和activate来实现目标.


vac*_*cip 5

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

编译错误亮点

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

编译错误信息

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


错误主要分为三种类型。语法错误是指代码没有意义。它无法编译,因为它违反了语言的基本规则。就像说“Grumblutty wadahargs”。

然后是运行时错误。当单词确实有意义时,甚至整个句子在语法上都没有问题,但在当前上下文中它会尝试一些无法完成的事情时,就会发生这种情况。就像说“把卡车顶在头上,去跑步吧”。不会工作。

第三种错误是所有程序员最喜欢的:逻辑错误。语法没问题,代码运行,没有错误消息,但出现了严重错误。比如:“打开窗户,走出去。” 这在技术上是可以做到的,但会带来伤害。程序员花费大量时间寻找此类错误。多好玩...