从 VBA (Excel) 中的另一个函数调用一个函数

Posted

技术标签:

【中文标题】从 VBA (Excel) 中的另一个函数调用一个函数【英文标题】:Calling one function from the other function in VBA (Excel) 【发布时间】:2015-12-18 05:20:52 【问题描述】:

我有两个 VBA 函数,但我无法从第一个函数调用另一个。

功能1:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim lastRow As Long
  With ActiveSheet
    lastRow = .Cells(.Rows.count, "A").End(xlUp).Row
    Dim I, J As Integer
    For I = 1 To lastRow
      If Cells(I, "C").Value = "" Then
        MsgBox "Please Enter Business Type Value", vbOKOnly
        Exit Sub
      End If
    Next I
  End With
End Sub

第二个功能:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Cells.Count > 1 Then Exit Sub
  Application.EnableEvents = False

  If Not Application.Intersect(Target, Me.Columns(3)) Is Nothing Then
    ActiveSheet.Unprotect
    Select Case Target.Value
      Case Is = "CNS"
        Target.Offset(0, 4).Locked = True
      Case Is = "cns"
        Target.Offset(0, 4).Locked = True
      Case Is = "APL"
        Target.Offset(0, 4).Locked = False
      Case Is = "apl"
        Target.Offset(0, 4).Locked = False
      Case Else
        MsgBox "Value not covered by the program", vbInformation + vbOKOnly
    End Select
    ActiveSheet.Protect
  Else
  End If
  Application.EnableEvents = True
End Sub

请帮助某人.. 提前谢谢..

【问题讨论】:

什么方法试图调用哪个?你试过什么?您看到了什么错误? 我想你的答案会在这个问题上:***.com/questions/1072075/… 我想从 Sub Worksheet_SelectionChange 调用 Sub Worksheet_Change 【参考方案1】:

在同一个模块中,您只需调用 nameoffunction 您可以将功能设为公开

public sub function

但这是一个糟糕(有时很好)的解决方案。您应该构建您的代码

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 call modul1.function1 ( Target ) ' As Range)
End sub

Private Sub Worksheet_Change(ByVal Target As Range)
 call modul1.function1 ( Target  ) ' as range
 call modul1.function2 ( Target  )
end sub

编辑好丑的方式

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
....
 call Worksheet_change ( Target)
End sub

【讨论】:

谢谢你的帮助,但我不知道怎么写 此调用 worksheet_change (target) 有效,谢谢

以上是关于从 VBA (Excel) 中的另一个函数调用一个函数的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA从另一个具有多个输入,不同大小的输出的子调用子

如何在 VBA 的另一个函数中调用我在 VBA 中创建的函数?

Excel中的VBA如何调用Java呀?

从 VBA 中的另一个子例程中抑制 MsgBox

从 Excel 调用 VBA 函数 - 在选定工作表上的选定列中查找

用户定义的函数在 vba 中工作正常,而从显示“值”错误的 excel 表调用时