Как вызвать функцию внутри другой функции в VBA?

У меня есть функция 1, которая выглядит так:

Function myFirstFunction(lngCol As Long) As String Dim vArr vArr = Split(Cells(1, lngCol).Address(True, False), "$") Col_Letter = vArr(0) End Function 

Мне нужно вызвать эту функцию в отдельной функции, например:

 Function myOtherFunction(myVar as Variant) As Variant Dim Some_Column As Range Some_Column = Range("B4").Address If Range((myFirstFunction(Some_Column.Column) & 65536)).End(xlUp) <> Range(myFirstFunction(Some_Column.Column) & 1) Then ...some code End If 

Это дает мне ошибку, я бы предположил, потому что я не могу использовать первую функцию во второй функции. Есть ли способ исправить это?

Ваша функция ничего не передает.

Вероятно, вы хотите изменить Col_Letter на myFirstFunction в первой функции.

Также во второй функции измените значение 65536 на rows.count.

Тогда будет ошибка:

 Some_Column = Range("B4").Address 

Измените его так:

 Set Some_Column = Range("B4") 

Это связано с тем, что он определен как диапазон, поэтому вы не можете передать адрес в (который является строкой), вы передаете объект (который вы должны использовать Set for)

Должно быть все хорошо после этого.

 Function myFirstFunction(lngCol As Long) As String Dim vArr vArr = Split(Cells(1, lngCol).Address(True, False), "$") myFirstFunction = vArr(0) End Function Function myOtherFunction(myVar As Variant) As Variant Dim Some_Column As Range Set Some_Column = Range("B4") If Range((myFirstFunction(Some_Column.Column) & rows.count)).End(xlUp) <> Range(myFirstFunction(Some_Column.Column) & 1) Then '...some code End If End Function 

Проблемная часть – Some_Column = Range("B4").Address

  1. Dim Some_Column As Range объявляет переменную как ссылочный тип, что означает, что вам нужно установить ссылку на объект, указав Set Some_Column = ... и, желательно, отпустите его в конце с помощью Set Some_Column = Nothing .
  2. .Address возвращает String а не объект, поэтому ваш код должен быть Set Some_Column = Range("B4") чтобы установить Some_Column в качестве диапазона.

В первой функции есть дополнительная ошибка, когда Col_Letter = vArr(0) должен, вероятно, быть myFirstFunction = vArr(0) или наоборот. Эта строка устанавливает возвращаемое значение function_name = ... , function_name = ...

Вы скопировали решение из этого вопроса, но если вы измените имя функции, вы должны полностью изменить ее.

  • Использование переменной для уменьшения рабочего листа
  • Преобразование числовых символов в алфавитные символы
  • Сравнить лист 1 col 1 - лист 2 col 1 место в листе 1 col 6
  • Оптимизация Excel VBA для скрытых строк
  • Удалите нули с начала строки VBA или Function
  • как вызвать функцию для изменения переменной vba
  • VBA: использование функции Find-like во всех листах книг без цикла
  • Как объединить значения столбцов в определенной ячейке в Excel?
  • Алгоритм вырезания в Excel VBA для минимизации потерь при заказе материалов
  • Несоответствие типов при применении заданного диапазона к WorksheetFunction
  • VBA: Как изменить значение ячейки в функции?
  • Давайте будем гением компьютера.