В чем разница между Trim () и Trim $ () в VBA? - PullRequest
13 голосов
/ 02 ноября 2011

В чем разница между trim и trim$ в vba?Случайно сегодня, когда я использовал функции left и trim в vba, компилятор сказал cant find project or library

Когда я его погуглил, на одном из форумов я обнаружил, что пользователь использует такие

 vba.trim("string")

Он ответил на префикс с VBA для функций.и на удивление это сработало и на моем компьютере. Но я нашел эти функции

 trim and trim$ 
 left and left$ 
 leftb and leftb$

Мне было интересно, что такое отделка салона $.Я хотел найти разницу Итак, я начал гуглить, но результаты для обрезки игнорируют алфавит $.

Мне просто интересно узнать об этом. Я подозревал, что обрезка - это функция vba и обрезка $является функцией Excel лист.Но у нас есть Application.worksheetfunction для использования функций Excel, верно? Может ли кто-нибудь различать отделку и отделку $.

Ответы [ 4 ]

21 голосов
/ 03 ноября 2011

Несмотря на то, что Иссун ответил на ваш вопрос в виде вопроса, у меня было достаточно подробностей, которые я хотел опубликовать, чтобы дать дополнительный ответ, а не комментарий.

Строковые версии значительно быстрее ~ 10-30% в зависимости от типа данных, полученных в результате моих испытаний за прошедшие годы. Хотя это обычно не заметно, это разница в производительности при работе с большими наборами данных. Так что для меня не составит труда использовать строку, а не вариантную версию.

Пример ниже работает со строками, поэтому он показывает преимущество в скорости в верхнем конце этого диапазона

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

Эта ссылка является отличной справкой, по вашему вопросу, и далеко за ее пределами

  1. Сравнение в vbBinaryCompare, а не vbTextCompare
  2. Оптимизация пустых строк
  3. Тестирование перед заменой
  4. Используя встроенные константы, VbNullString быстрее, чем "", хотя оба пропустят ячейку, содержащую ', тогда как IsEmpty заберет это
  5. Оптимизирующие циклы (разбейте AND на два отдельных IF с, чтобы обеспечить ранний выход)
  6. Оптимизация Если тесты сначала возвращают наиболее распространенный логический результат, а не проходят по пути Else (т. Е. Тест False может быть более подходящим, чем True)
  7. Использование Mid$ в левой части назначения. С скрытые возможности VBA

    Sub QuickTimer1()
    Dim lngRow As Long
    Dim dbTime As Double
    Dim strSample As String
    Dim strShort As String
    strSample = "random string"
    dbTime = Timer()
    For lngRow = 1 To 50000000
        strShort = Left$(strSample, 6)
    Next lngRow
    MsgBox Timer() - dbTime
    End Sub
    
    Sub QuickTimer2()
    Dim lngRow As Long
    Dim dbTime As Double
    Dim strSample As String
    Dim strShort As String
    strSample = "random string"
    dbTime = Timer()
    For lngRow = 1 To 50000000
        strShort = Left(strSample, 6)
    Next lngRow
    MsgBox Timer() - dbTime
    End Sub
    
9 голосов
/ 02 ноября 2011

Trim - вариант варианта.Если вы используете его в строке, ему потребуется выполнить ненужное преобразование.

Trim$ - версия строки.Используйте это, если вы используете его в строке.

Замечание: забавная версия: Application.WorksheetFunction версия Trim делает что-то отличное от функции обрезки VBA.

Стоит отметить, что Left / Left $, Mid / Mid $, Right / Right $ также имеют варианты / строковые версии.В функциях, которые зацикливаются или часто их используют, вы заметите заметное снижение производительности, если будете использовать вариантную версию, хотя на современных ПК это не так уж и много, но все же, возможно, стоит не делать что-либо, когда вы это знаете.вызовет дополнительный шаг, который вам не нужен.

5 голосов
/ 02 ноября 2011

trim принимает вариант в качестве параметра, а trim$ принимает строку.

Существуют некоторые преимущества в производительности при использовании trim $ (поскольку вы не конвертируете из варианта), но есть вероятность, что вы их не заметите.

EDIT:

Я понял это, проверив браузер объектов. Когда вы находитесь в редакторе VBA, нажмите F2, и вы сможете искать функции и познакомиться с фреймворком.

2 голосов
/ 02 ноября 2011

Я считаю, что нотация является наследием дней VB, где $ использовалось для обозначения объектов / функций, которые были (или оперировали) строками.

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

...