将过程分配给Excel VBA中的变量

时间:2019-03-20 15:33:40

标签: arrays excel class procedure assign

1.Intro

我需要像以前使用其他语言一样将过程分配给Excel VBA中的变量。稍后,将使用这些变量来调用相应的过程。我想避免4 x 30程序的案例说明。
不幸的是,我尝试了所有可以想到的事情,并在网上搜索,但没有任何效果。因此,我希望有人对此有所关注,并可能会立即看到缺少哪个魔术词。
万一VBA无法使用这种编程,请多谢我向我确认。
我简化了代码以更好地关注该问题,并组成了以下基本部分。这应该允许重现该错误。

谢谢,Mount

2。基础设施

PC:Win7Enterprise-64 SP1,Excel 365 ProPlus-32(1808)

3。代码

Class Module

'in StepClass_Module
Public proc As Variant          'proc = procedure to run  

编程模块

Public step(1) As StepClass_Module      'Declare array of procedures  

Sub main()  
   Set step(0) = New StepClass_Module  
   Set step(1) = New StepClass_Module  

   Set step(0).proc = Import()         'Should allocate corresponding Procedure but runs it => error 13  
   Set step(1).proc = Prepare()        'Should allocate corresponding Procedure but runs it => error 13  

   Run step(0).proc                    'Run corresponding Procedure  
   Run step(1).proc                    'Run corresponding Procedure  
End Sub


Function Import() As Variant  
   Debug.Print ("Import")  
End Function

Function Prepare() As Variant  
   Debug.Print ("Prepare")  
End Function

2 个答案:

答案 0 :(得分:0)

请考虑以下模型:

Sub main()
    Dim s As String
    s = "inputt,makereport,outputt"
    arr = Split(s, ",")

    For Each a In arr
        Run a
    Next a
End Sub

Sub inputt()
    MsgBox "input"
End Sub

Sub makereport()
    MsgBox "reporting"
End Sub

Sub outputt()
    MsgBox "dun"
End Sub

答案 1 :(得分:0)

这是我想要使其正常运行的更新代码,现在可以正常工作了!大帮忙!

类模块     ===========

    'in StepClass_Module  
    Public proc As String          'proc = procedure to run  

Programming Module
==================

Public step(1) As StepClass_Module      'Declare array of procedures  

Sub main()  
   Set step(0) = New StepClass_Module  
   Set step(1) = New StepClass_Module  

   step(0).proc = "Import"         'allocate corresponding Procedure  
   step(1).proc = "Prepare"        'allocate corresponding Procedure  

   Run step(0).proc                'Run corresponding Procedure  
   Run step(1).proc                'Run corresponding Procedure  
End Sub  



Sub Import()  
   Debug.Print ("Import")  
End Sub  

Sub Prepare()  
   Debug.Print ("Prepare")  
End Sub