Excel VBA – 一线投掷“参数不可选”

我试图开发一个从一个工作表中同一个单元格中提取数据的子工具,并将其复制到名为“Summary”的工作表中,并将其粘贴到创build值表中。 但是,我收到错误“参数不可选”,第一行被突出显示为问题(与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 

问题其实就在这一行,

 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 

我相信你对摘要的使用应该被引用为一个string,并且不需要为复制和粘贴操作select一些东西。 最后,你正在混合和不匹配Range对象和Range.Cells属性的语法; 例如它是Range("B4")Cells(2, i)


请参阅如何避免使用Excel中的selectVBAmacros来获取更多的方法来摆脱依靠select和activate来实现您的目标。

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

编译错误高亮显示

在这样的情况下,寻找选定或突出显示的代码(在你的情况下的范围 )。 这是造成这个问题的原因之一 – 编译错误。

编译错误消息

在一个Sub可以被执行之前,它需要被编译。 发生这种情况时,会检查是否有错误。 一些特定types的错误甚至不会让代码被编译,所以它甚至不会开始执行。


有三种主要types的错误。 语法错误是代码没有意义的时候。 它不能被编译,因为它违反了语言的基本规则。 就像说“Grumblutty wadahargs”一样

然后是运行时错误 。 这种情况发生在词语有意义的时候,甚至整个句子在语法上也是可以的,但是在当前的情况下,它会尝试一些无法做到的事情。 就像说: “把货车放在你的头上,跑去跑步”。 不会工作。

第三种错误是所有程序员的最爱: 逻辑错误 。 语法是好的,代码运行,没有错误信息,但有些可怕的错误。 像: “打开窗户,走出去”。 这在技术上可以做到,但是会伤害到的。 程序员花费数小时来寻找这种types的错误。 多好玩…