Создайте пользовательскую функцию рабочего листа в Excel VBA

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

Для начала, часто утверждение было бы более длинным, чем выписывание чека самостоятельно. Сравните:

assertThat(doc.matches(".*the-regex.*")).isTrue();

assertThat(doc).displayedAs("the doc").containsMatch("the-regex");

(Чтобы быть справедливым, есть случаи, в которых не так просто написать чек самостоятельно.)

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

(Чтобы быть справедливым, сбой isTrue() приводит к появлению полезного сообщения , в то время как вы хотели бы, чтобы «ожидалось, что он не будет соответствовать: my_regex.» вернемся к assertWithMessage, как вы сказали, но теперь ваше утверждение снова становится длинным, и вы должны повторить «my_regex», если хотите, чтобы оно было в сообщении.)

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

Как отмечалось во всех скобках выше, эта функция есть его использование. «Реальные» проблемы в основном:

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

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

13
задан lfrandom 6 August 2013 в 20:36
поделиться

2 ответа

Yes it can. You simply define a VBA function in a module. See http://www.vertex42.com/ExcelArticles/user-defined-functions.html for a nice introduction with examples.

Here's a simple example:

  • Create a new workbook
  • Switch to VBA view (Alt-F11)
  • Insert a module: Insert | Module
  • Module contents:
Option Explicit

Function MyCustomFunction(input)
    MyCustomFunction = 42 + input
End Function
  • Switch back to worksheet (Alt-F11), and enter some values:
A1: 2
A2: =MyCustomFunction(A1)
20
ответ дан 1 December 2019 в 21:53
поделиться

Слово input необходимо заменить, так как это базовое ключевое слово. Вместо этого попробуйте num. Вы также можете пойти дальше, указав тип, например вариант.

Function MyCustomFunction(num As Variant)
    MyCustomFunction = 42 + num
End Function
4
ответ дан 1 December 2019 в 21:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: