使用参数调用sub时应使用哪些参数(ByVal Target As Range)

时间:2018-03-08 16:47:11

标签: excel vba object arguments subroutine

我在VBA上创建一个附加到excel中的数据验证列表的宏。当从列表中选择某个选项时,我希望它运行分配给该选择的宏。但是我反复收到错误'编译错误。参数不是可选的。我知道我需要在调用宏之后添加参数,但是我输入的任何内容都会导致'Object required'或'expected)'

此代码位于我的工作表中。 “Case”15行“:Macro1”是错误的行。

Private Sub Worksheet_change(ByVal Target As Range)
If Not Intersect(Target, Range("P4")) Is Nothing Then
    Select Case Range("P4")
    Case "Fifteen": Macro1
    End Select
End If
End Sub

以下代码位于模块中 - 用于将值从一个工作表中的单元格复制到另一个工作表。

Sub Macro1(ByVal Target As Range)

Dim r1 As Range, r2 As Range
Set r1 = Sheets("Calculator").Range("C18:D19")
Set r2 = Sheets("Answers").Range("I14:J15")
If Intersect(Target, r1) Is Nothing Then Exit Sub
    Application.EnableEvents = False
         r2.Value = r1.Value
    Application.EnableEvents = True

End Sub

任何想法是参数参数应该是什么?我认为这将是Case“Fifteen”的行:Macro1(“C18:D19”)或Case“Fifteen”:Macro1(r1),但没有运气。

模块中的代码独立运行,所以我认为它没有任何问题。

非常感谢任何帮助。我环顾四周,找不到答案。

1 个答案:

答案 0 :(得分:0)

感谢您的帮助。通过删除intersect行,它现在可以按预期工作。最终代码如下。

Private Sub Worksheet_change(ByVal Target As Range)
        Select Case Range("P4")
        Case "Fifteen": Macro1
        End Select
    End If
    End Sub

Sub Macro1()

Dim r1 As Range, r2 As Range
Set r1 = Sheets("Calculator").Range("C18:D19")
Set r2 = Sheets("Answers").Range("I14:J15")
      Application.EnableEvents = False
         r2.Value = r1.Value
    Application.EnableEvents = True

End Sub