我正在尝试开发一个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
答案 0 :(得分: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
我相信您对摘要的使用应该被引用为文字字符串,并且无需为复制和粘贴操作选择一些内容。最后,您混合和不匹配Range object和Range.Cells property的语法;例如它是Range("B4")
和Cells(2, i)
。
有关远离依赖选择和激活以实现目标的更多方法,请参阅How to avoid using Select in Excel VBA macros。
答案 1 :(得分:4)
让我向Jeeped的答案添加一件事。每当你看到Sub在出错后突出显示,它通常不是罪魁祸首。 黄色突出显示并不意味着"此行存在问题。" 仅仅意味着"这是要执行的下一行代码"或者换句话说,"这是我停止执行程序的地方。"
在这种情况下,请查找已选择或突出显示的代码(在您的案例中为范围)。这就是造成问题的原因 - 编译错误。
在执行Sub之前,需要编译它。发生这种情况时,会检查错误。一些特定类型的错误甚至不会让代码被编译,因此它甚至不会开始执行。
有三种主要类型的错误。 语法错误是代码没有意义的时候。它无法编译,因为它违反了该语言的基本规则。就像说" Grumblutty wadahargs。"
然后是运行时错误。当这些单词确实有意义时,甚至整个句子在语法上都是正确的,但是在当前的上下文中,它会尝试一些无法完成的事情。就像说"把卡车放在头上然后去跑步。" 不会工作。
第三种错误是所有程序员的最爱:逻辑错误。语法没问题,代码运行,没有错误消息,但是出现了可怕的错误。喜欢:"打开窗户然后走出去。" 技术上可以完成,但会受到伤害。程序员花费数小时的时间来寻找这种类型的错误。很有趣......