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