Назначить Процедуру переменной в Excel VBA

#arrays #excel #class #procedure #assign

#массивы #преуспеть #класс #процедура #назначить #excel

Вопрос:

1. Введение

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

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

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

ПК: Win7entrise-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
  

Комментарии:

1. Просто передайте имя процедуры в виде строки. Это то, что Run ожидается.

2. Привет, Рони, я очень благодарен тебе за то, что ты сэкономил мне столько времени. Я надеялся, что это небольшая тема, но никогда не рассматривал «Запуск». Я адаптировал свой код только для тех, кто сталкивается с такой же проблемой. Похоже, я не могу сделать это в комментарии. Я попробую ответить.

Ответ №1:

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

 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. Привет, Гэри, теперь, когда я понимаю твой код, главное сообщение для меня заключается в том, что Run должен использоваться с именем процедуры в виде строки, чего я не делал (знал). Это изменение решило мою проблему. Большое вам спасибо за ваши усилия.

Ответ №2:

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

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

     '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