代码之家  ›  专栏  ›  技术社区  ›  Andrewdrew

使用参数(ByVal目标作为范围)调用sub时应使用哪些参数

  •  2
  • Andrewdrew  · 技术社区  · 6 年前

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

    此代码在我的工作表中。“Case”十五行: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
    

    你知道参数应该是什么吗?我认为这将与案例“十五”:Macro1(“C18:D19”)或案例“十五”:Macro1(r1)大致相同,但没有运气。

    模块中的代码在独立运行时可以工作,因此我认为不会有任何问题。

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Andrewdrew    6 年前

    谢谢你的帮助。通过删除 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