Вызов функции с использованием имени переменной в VBA

Вопрос: Заранее спасибо. Я пытаюсь вызвать функцию, используя имя переменной. Он бросает ошибку Макрос "testfunc" не найден. Возобновить без ошибок Мой код: я пробовал ниже трех операторов, но все они бросают ту же ошибку. sFuncName = "testfunc" ExtractData = Application.Run("Sheet.xls" & sFuncName, s1, s2) ExtractData = Application.Run(sFuncName, s1, s2) ExtractData = CallByName("Sheet.xls", sFuncName, VbMethod, s1,

Вопрос:

Заранее спасибо.

Я пытаюсь вызвать функцию, используя имя переменной. Он бросает ошибку

Макрос “testfunc” не найден. Возобновить без ошибок

Мой код: я пробовал ниже трех операторов, но все они бросают ту же ошибку.

sFuncName = «testfunc» ExtractData = Application.Run(«Sheet.xls» & sFuncName, s1, s2) ExtractData = Application.Run(sFuncName, s1, s2) ExtractData = CallByName(«Sheet.xls», sFuncName, VbMethod, s1, s2)

Обратите внимание, что sFuncName возвращает значение & у меня есть 2 Excels, открытых в тот момент, я пытаюсь скопировать данные из одного Excel в другой.

Пожалуйста, помогите мне в этом.

Private Function ABC sFuncName = oMapWksht.Cells(sMapRowItr, 3).Value ‘sFuncName = «testfunc» ExtractData = Application.Run(«Sheet.xls» & sFuncName, s1, s2) ‘ExtractData = Application.Run(sFuncName, s1, s2) ‘ExtractData = CallByName(«Sheet.xls», sFuncName, VbMethod, s1, s2) End Function Public Function testfunc(ByVal s1 As String, ByVal s2 As String) As Boolean — — —- End Function Лучший ответ:

Если функция, которую вы вызываете, находится в той же книге, что и вызывающий, неважно, сколько книг открыто.

Если вызываемая процедура не имеет уникального имени во всем проекте, вам нужно квалифицировать имя функции хотя бы с именем модуля. Это должно заставить вас идти:

Модуль 1 (вызывающий)

Sub DoSomething() Debug.Print Application.Run(«Module2.Test», «Test») End Sub

Модуль2 (вызываемый)

Public Function Test(ByVal title As String) As VbMsgBoxResult Test = MsgBox(«Works?», vbQuestion + vbYesNo, title) End Function Ответ №1

Вы можете использовать переменную String для хранения имени Sub. Ниже приведен пример Sub в том же модуле, что и вызывающий:

Sub MAIN() Dim st As String st = «whatever» Application.Run st End Sub Public Sub whatever() MsgBox «whatever» End Sub

Если вызывающий и вызываемый подсистемы находятся в разных модулях, синтаксис может несколько отличаться.

EDIT # 1:

Если мы хотим вызвать Sub в другом модуле в одной книге, синтаксис будет таким же.

Если мы хотим вызвать Sub в другой книге, и обе рабочие книги открыты, то вызывающий будет выглядеть так:

Sub MAIN() Dim st As String st = «Book2.xlsm!whatever» Application.Run st End Sub

Обычно я объявляю вызванный Sub Public, но я не знаю, если это необходимо.

EDIT # 2

Чтобы использовать другую рабочую книгу UDF() в ячейке рабочего листа, выполните следующие действия:

где qwerty() является Public UDF()

Оцените статью
Добавить комментарий