VBA代码中错误的参数数量或无效的属性分配错误

希望有人能帮助我在这里。

我试图把一些基于两个单元格的值隐藏行的代码放在一起。

我的代码如下:

Sub hideSummaryDetailed() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False 'Hide all the Rows based on the selection for Summary/Detailed data linked to cell A1 If Cells(1, 1) = 0 Then Rows("23:336").Select Selection.EntireRow.Hidden = True ElseIf Cells(1, 1) = 1 And Cells(10, 5) = "All" Then Rows("23:43").Select Selection.EntireRow.Hidden = False Range("E11").Select Rows("44:336").Select Selection.EntireRow.Hidden = True ElseIf Cells(1, 1) = 2 And Cells(10, 5) = "All" Then Rows("23:126").Select Selection.EntireRow.Hidden = False Range("E11").Select Rows("127:336").Select Selection.EntireRow.Hidden = True ElseIf Cells(1, 1) = 1 And Cells(10, 5) = "Cardiff" Then Rows("128:148").Select Selection.EntireRow.Hidden = False Range("E11").Select Rows("23:127, 149:336").Select Selection.EntireRow.Hidden = True ElseIf Cells(1, 1) = 2 And Cells(10, 5) = "Cardiff" Then Rows("128:232").Select Selection.EntireRow.Hidden = False Range("E11").Select Rows("23:127, 233:336").Select Selection.EntireRow.Hidden = True ElseIf Cells(1, 1) = 1 And Cells(10, 5) = "Swansea" Then Rows("233:253").Select Selection.EntireRow.Hidden = False Range("E11").Select Rows("23:232, 254:336").Select Selection.EntireRow.Hidden = True ElseIf Cells(1, 1) = 2 And Cells(10, 5) = "Swansea" Then Rows("233:336").Select Selection.EntireRow.Hidden = False Range("E11").Select Rows("23:232").Select Selection.EntireRow.Hidden = True ElseIf Cells(1, 1) = 1 And Cells(10, 5) = "Both" Then Rows("128:148, 233:253").Select Selection.EntireRow.Hidden = False Range("E11").Select Rows("23:127, 149:232, 254:336").Select Selection.EntireRow.Hidden = True ElseIf Cells(1, 1) = 2 And Cells(10, 5) = "Both" Then Rows("128:336").Select Selection.EntireRow.Hidden = False Range("E11").Select Rows("23:127").Select Selection.EntireRow.Hidden = True End If Application.ScreenUpdating = True Application.EnableEvents = True Range("E11").Select End Sub 

然而,当我运行它时,我不断收到一个错误,说错误的数量的参数或无效的财产分配,当我点击确定,它不会突出代码的任何特定部分指向我的方向。

我很新的VBA,并已经search了几个论坛的意见,这个错误,但没有我试过的工作,或者我还没有明白这一点。

任何帮助将非常感激。

谢谢

以下是上述问题的解决scheme。

我有重新考虑的代码。

在下面的代码中,将sheetName“Sample”replace为工作簿中工作表的名称。

  Sub hideSummaryDetailed() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.DisplayPageBreaks = False Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sample") With ws 'Hide all the Rows based on the selection for Summary/Detailed data linked to cell A1 If .Cells(1, 1) = 0 Then .Range("A23:A336").EntireRow.Hidden = False ElseIf .Cells(1, 1) = 1 And .Cells(10, 5) = "All" Then .Range("A23:A336").EntireRow.Hidden = False .Range("A44:A336").EntireRow.Hidden = True ElseIf .Cells(1, 1) = 2 And .Cells(10, 5) = "All" Then .Range("A23:A336").EntireRow.Hidden = False .Range("A127:3A36").EntireRow.Hidden = True ElseIf .Cells(1, 1) = 1 And .Cells(10, 5) = "Cardiff" Then .Range("A23:A336").EntireRow.Hidden = False .Range("A23:A127, A149:A336").EntireRow.Hidden = True ElseIf .Cells(1, 1) = 2 And .Cells(10, 5) = "Cardiff" Then .Range("A23:A336").EntireRow.Hidden = False .Range("A23:A127, A233:A336").EntireRow.Hidden = True ElseIf .Cells(1, 1) = 1 And .Cells(10, 5) = "Swansea" Then .Range("A23:A336").EntireRow.Hidden = False .Range("A23:A232, A254:A336").EntireRow.Hidden = True ElseIf .Cells(1, 1) = 2 And .Cells(10, 5) = "Swansea" Then .Range("A23:A336").EntireRow.Hidden = False .Range("A23:A232").EntireRow.Hidden = True ElseIf .Cells(1, 1) = 1 And .Cells(10, 5) = "Both" Then .Range("A23:A336").EntireRow.Hidden = False .Range("A23:A127, A149:A232, A254:A336").EntireRow.Hidden = True ElseIf .Cells(1, 1) = 2 And .Cells(10, 5) = "Both" Then .Range("A23:A336").EntireRow.Hidden = False .Range("A23:A127").EntireRow.Hidden = True End If End With ws.Range("E11").Select Application.ScreenUpdating = True Application.EnableEvents = True End Sub 

这是无效的VBA代码:

 Rows("23:43").Select Selection.EntireRow.Hidden = False 

请记住,VBA中的一行是单个命令。 上面的行是两个单独的命令。 这是有效的VBA代码:

 Rows("23:43").Select Selection.EntireRow.Hidden = False 

但是现在我们处理代码本身的低效率。 您隐式使用ActiveSheet ,而您依赖于Select 。 为了避免SelectActivate我会build议从这里开始: 如何避免在Excel VBA中使用select 。

我们如何重构这段代码? 简单:

 ' Near the beginning of the module.... Dim Target as Worksheet ' Ideally, explicitly set this to the correct worksheet. ' For now, this will still use the Activesheet, it will just ' do it more explicitly and reliably since it won't potentially change as the code is running. Set Target = ActiveSheet ' Later in the code.... ' Notice how clean this is. We rely on Target instead of an implicit ActiveSheet, and we ' don't have to rely on the `EntireRow` property of `Selection` since we are explicitly accessing ' the rows. Target.Rows("23:24").Hidden = False 

这不仅可以解决手头的错误,还可以帮助您避免许多常见的错误,这些错误将在以后造成无数小时的挫折和维护。