在excel vba中使用数组和函数调用多个macros

我无法调用名称存储在string数组中的macros。

我附上了代码。

Option Explicit Option Compare Text Dim i, Ro As Integer Public Sub Universal_Macro() Dim Col(10) As Integer Dim macro_name(10) As String Ro = ActiveCell.Row i = 1 For i = 1 To 10 Call Mac_Sched(Col(), macro_name()) Next End Sub Sub Mac_Sched(Col() As Integer, Internal_Array() As String) Cells(Ro, Col(i)).Select Call Internal_Array(i) End Sub 

sub Mac_Sched获取错误。

尝试使用Application.Run

 Sub RunMc() Dim a(1 To 2) As String Dim MN As String For i = 1 To 2 'Fill the array a(i) = "m" & i Next MN = "Module1" 'the module name For i = LBound(a) To UBound(a) Application.Run MN & "." & a(i) Next End Sub Sub m1() Debug.Print "m1" End Sub Sub m2() Debug.Print "m2" End Sub 

TBBH,我真的不知道你在做什么,大量修改的代码除了试图从一个数组元素派生的string中调用一个macros以外,没有任何其他的方法可以显示特定的方法。

Application.OnTime方法使用一个string作为要调用的过程的名称。

 Option Explicit Option Compare Text Dim i As Integer, Ro As Integer Sub zero() Debug.Print "zero: " & i End Sub Sub first() Debug.Print "first: " & i End Sub Sub second() Debug.Print "second: " & i End Sub Sub third() Debug.Print "third: " & i End Sub Public Sub Universal_Macro() Dim Col() As Integer Dim macro_Name As Variant macro_Name = Array("zero", "first", "second", "third") ReDim Col(UBound(macro_Name)) For i = LBound(macro_Name) To UBound(macro_Name) Col(i) = i Next Ro = ActiveCell.Row For i = LBound(macro_Name) To UBound(macro_Name) Call macro_Sched(Col(i), macro_Name) Next End Sub Sub macro_Sched(c As Integer, internal_Array As Variant) Cells(Ro, c + 1).Select '<~~Don't rely on Select! You dont' even reference a worksheet here. Application.OnTime Now, internal_Array(c) End Sub 

如果将parameter passing给子子程序,那么某种types的stringreplace可能适用于此,但子子目录中的具体信息并不明显。


请参阅如何避免使用Excel中的selectVBAmacros来获取更多的方法来摆脱依靠select和activate来实现您的目标。