Vba 将子函数名作为参数传递给函数

Vba 将子函数名作为参数传递给函数,vba,excel,Vba,Excel,我有一个用户表单,它在工作簿中有一个工作表名称列表框,有三个按钮:一个删除列表框中选择的所有工作表,一个只清除这些工作表,另一个从该工作表中删除图表。我目前有三个子函数,它们看起来几乎相同,因为每个子函数仅在循环中运行一个子函数,基于所选按钮: Sub DeleteSheets() 'Removes sheets selected by user in ListBox For k = 0 To sheetNameListBox.ListCount - 1 If s

我有一个用户表单,它在工作簿中有一个工作表名称列表框,有三个按钮:一个删除列表框中选择的所有工作表,一个只清除这些工作表,另一个从该工作表中删除图表。我目前有三个子函数,它们看起来几乎相同,因为每个子函数仅在循环中运行一个子函数,基于所选按钮:

Sub DeleteSheets() 'Removes sheets selected by user in ListBox

    For k = 0 To sheetNameListBox.ListCount - 1      
     If sheetNameListBox.Selected(k) = True Then     
      DeleteSheet sheetNameListBox.List(k)           
     End If
    Next k

End Sub

Sub ClearSheets() 'Clears sheets selected by user in ListBox

    For k = 0 To sheetNameListBox.ListCount - 1       
     If sheetNameListBox.Selected(k) = True Then      
      ClearSheet sheetNameListBox.List(k)              
     End If
    Next k

End Sub

Sub DeleteCharts() 'Removes charts from sheets selected by user

    For k = 0 To sheetNameListBox.ListCount - 1   
     If sheetNameListBox.Selected(k) = True Then  
      DeleteChart sheetNameListBox.List(k)        
     End If
    Next k

End Sub
为了解决这个问题,我决定开发如下子功能:

Sub RemoveSheetData(removeType As String)

        For k = 0 To sheetNameListBox.ListCount - 1   
         If sheetNameListBox.Selected(k) = True Then  
          If removeType = "DeleteSheet" Then DeleteSheet sheetNameListBox.List(k)
          If removeType = "ClearSheet" Then ClearSheet sheetNameListBox.List(k)
          If removeType = "DeleteChart" Then DeleteChart sheetNameListBox.List(k)
         End If
        Next k

End Sub

这似乎也是低效的,因为我必须有三个案件为每个。有没有一种方法可以让我直接输入我想要调用的函数的名称,并让它运行?

这里有一个答案,显然是从


这是一个明目张胆地从我这里偷来的答案

Sub test() 
    Dim ftnName As String 
    Dim argument As String 
    Dim result As String 

    ftnName = "myFunction" 
    argument = "cat" 

    result = Application.Run(ftnName, argument) 

    MsgBox result 
End Sub 

Function myFunction(inString As String) As String 
    myFunction = inString & " has " & Len(inString) & " letters." 
End Function