2013-03-07 3 views
0

У меня вопрос о Excel 2010 VBA. Сделали много поиска решения, но ответы не затрагивают мою проблему. Надеясь, что сообщество stackoverflow сможет пролить свет на меня.Excel 2010 VBA Пользовательская функция Модификация входного параметра

У меня есть пользовательская функция, которая вызывается из ячеек на листе. Он вызывается с двумя параметрами - обе ячейки на одном листе.

Целью функции является просмотр двух параметров и возврат строки в результате функции в зависимости от их значений.

Эти функции функционируют должным образом.

Однако, если значение первого параметра имеет определенное значение, я хочу иметь возможность изменить значение второго параметра. Здесь я застреваю. Я не могу найти способ изменить его значение.

Я попытался просто установить параметр на нужное значение, но это вызывает ошибку. Я думал, что смогу настроить указатель на активный лист и, следовательно, на ячейку, но я не знаю, какова его ссылка (так как на листе будет много).

Если честно, я не уверен, что могу делать то, что мне нужно. Любые мысли или комментарии по пути вперед будут с благодарностью восприняты.

Что касается

Грэм Джонс

ответ

1

Поскольку пользовательские функции (UDF) не могут изменить состояние рабочей книги/листа и т. Д. Вы можете использовать событие изменения рабочего листа.

Скопируйте этот код на листе, где вы вводите функцию

Private Sub Worksheet_Change(ByVal Target As Range) 
Application.EnableEvents=False 
    if Target.Address = "$A$1" and target.count = 1 Then ' change in first parameter - first parameter 
     if Target.Value ="something" then Range("B1").Value ="change" 
     '$A$1 is the location of fist paramenter 
     'range("b1") is second parameter on assumption 
     end if 
    Application.EnableEvents=True 
    End Sub 
+0

Большое спасибо за это предложение. Я использовал это, чтобы успешно проверить мои значения и изменить другие по мере необходимости. – user133589

0

Как правило, вы не хотите, чтобы ваши функции Excel, чтобы изменить свои входы. Я делал это раньше, но это считается очень плохой практикой.

Более приемлемый способ был бы сделать функцию, которая вычисляет второй параметр - Это было бы принять 2 входа:

  1. Первый параметр
  2. Значение по умолчанию для второго параметра

Затем вы используете эту функцию для вычисления второго параметра на вашем листе (другими словами, вместо того, чтобы ячейка, которая содержит ваш второй параметр, просто была заданной величиной, теперь она вычисляется с помощью этой функции), а затем ваша исходная функция может работать, как всегда, причем второй параметр всегда является ожидаемым.

Надеюсь, это имеет смысл. Если нет, просто дайте мне знать, и я приведу пример.

Смежные вопросы