试图运行这个程序,但得到错误“编译错误,错误的参数数量或无效的属性分配”

Private Sub CommandButton1_Click() LastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row For i = 2 To LastRow If Cells(i, 1) = "Wheat" Then Range(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Select Selection.Copy Workbooks.Open Filename:="C:\commodities\allcommodities-new.xlsm" Worksheets("Sheet2").Select erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row ActiveSheet.Cells(erow, 51).Select ActiveSheet.Paste ActiveWorkbook.Save ActiveWorkbook.Close End If Next i For i = 2 To LastRow If Cells(i, 1) = "Feeder Cattle" Then Range(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Select Selection.Copy Workbooks.Open Filename:="C:\commodities\allcommodities-new.xlsm" Worksheets("Sheet2").Select erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row ActiveSheet.Cells(erow, 3).Select ActiveSheet.Paste ActiveWorkbook.Save ActiveWorkbook.Close End If Next i For i = 2 To LastRow If Cells(i, 1) = "Corn" Then Range(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Select Selection.Copy Workbooks.Open Filename:="C:\commodities\allcommodities-new.xlsm" Worksheets("Sheet2").Select erow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row ActiveSheet.Cells(erow, 67).Select ActiveSheet.Paste ActiveWorkbook.Save ActiveWorkbook.Close End If Next i end sub 

注意:代码在第一个“Range”命令失败,并出现“编译错误,参数数量错误或属性赋值不正确”的问题。我可以使用Range命令中的2个单元格定义运行代码。

当你可以声明range("B1, C1, D1")你不能说明你正在做的range("B1", "C1", "D1")

如果你真的想要第2行,第3行和第4行,那么就使用第一个和最后一个range("B1:D1")

 Range(Cells(i, 2), Cells(i, 4)).Select 

如果实际的列是不连续的组,则使用Union。

 dim rng as range set rng = union(Cells(i, 2), Cells(i, 4), Cells(i, 6)) rng.select 

请查看如何避免在Excel VBAmacros中使用select 。

 Option Explicit Private Sub CommandButton1_Click() Dim i As Long, lastRow As Long, nextRow As Long Dim wbACN As Workbook lastRow = Range("A" & Rows.Count).End(xlUp).Row Set wbACN = Workbooks.Open(Filename:="C:\commodities\allcommodities-new.xlsm") For i = 2 To lastRow Select Case LCase(Cells(i, 1).Value2) Case "wheat" Union(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Copy _ Destination:=wbACN.Worksheets("Sheet2").Cells(Rows.Count, "AY").End(xlUp).Offset(1, 0) Case "feeder cattle" Union(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Copy _ Destination:=wbACN.Worksheets("Sheet2").Cells(Rows.Count, "C").End(xlUp).Offset(1, 0) Case "corn" Union(Cells(i, 2), Cells(i, 3), Cells(i, 4)).Copy _ Destination:=wbACN.Worksheets("Sheet2").Cells(Rows.Count, "BO").End(xlUp).Offset(1, 0) Case Else 'do notbhing End Select Next i wbACN.Close savechanges:=True End Sub