Назначить процедуру переменной в Excel VBA - PullRequest
1 голос
/ 20 марта 2019

1.Intro

Мне нужно назначить процедуры для переменных в Excel VBA, как я делал это ранее на других языках.В дальнейшем эти переменные будут использоваться для вызова соответствующей процедуры.Я хотел бы избежать инструкций кейса для процедур 4 x 30.
К сожалению, я перепробовал все, что мог придумать, и искал в Интернете, но ничего не получалось.Поэтому я надеюсь, что кто-то может это заметить и, вероятно, сразу увидит, какое волшебное слово отсутствует.
Если такой вид программирования недоступен в VBA, я был бы благодарен, если бы кто-то смог мне это подтвердить.
Я упростил свой код, чтобы лучше сосредоточиться на проблеме, и составил основную часть ниже.Это должно позволить воспроизвести ошибку.

Заранее спасибо, Маунти

2.Инфраструктура

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

3.Код

Модуль класса

'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 голосов
/ 20 марта 2019

Вот идет обновленный код, так как я хотел, чтобы он работал и теперь он работает!Большая помощь!

Модуль класса ============

    '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  
0 голосов
/ 20 марта 2019

Рассмотрим следующую модель:

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
...