У меня есть пользовательская форма, которая имеет список имен листов в книге и имеет три кнопки: один удаляет все листы, выбранные в списке, просто удаляет эти листы, а другой удаляет диаграммы с этого листа. Я в настоящее время есть три суб функции, которые выглядят почти идентично, так как каждый раз проходит один субфункцию на петле, на основе выбранной кнопки:Передача имени подфункции в качестве аргумента в функции
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
Это, похоже, также неэффективно, поскольку у меня должно быть три случая для каждого. Есть ли способ, которым я могу напрямую ввести имя функции, которую я хочу вызвать, и запустить ее?