在VBA中Trim()和Trim $()之间有什么区别?

vba中trimtrim$什么区别? 无意中今天当我在vba中使用left和trim函数时,编译器说cant find project or library

当我GOOGLE了,在论坛之一,我发现用户使用这些

  vba.trim("string") 

他回答以vba作为前缀。 而且令人惊讶的是它在我的电脑上工作。但是我发现了这些function

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

我想知道什么是修剪和修剪$。 我想find差异所以我开始谷歌,但结果是修剪忽略$字母。

我只是好奇,知道这件事。我怀疑是微调function,修剪$是Excel表function。 但是我们有Application.worksheetfunction使用excel函数吗?任何人都可以区分trim和trim $。

虽然Issun回答你的问题,但我有足够的细节,我想提供一个进一步的答案,而不是发表评论。

string版本显着更快〜大约10-30%,这取决于我多年来testing的数据types。 虽然这通常不明显,但在大型数据集上运行时性能会有差异。 所以对我来说,使用string而不是变种版本是一件简单的事情。

下面的示例对string进行了处理,因此它在此范围的较高端显示出速度优势

我在这两个公共插件中都使用了这些函数和variables数组,因为这些程序通常在整个工作表上使用,甚至整个工作簿

这个链接是一个很好的参考,对于你的问题,甚至超越

  1. 比较vbBinaryCompare而不是vbTextCompare
  2. 优化空string
  3. 更换前进行testing
  4. 使用内置的常量, VbNullString""更快,虽然两者都会丢失一个包含'的单元格,而IsEmptyselect这个
  5. 优化循环(打破AND分成两个独立的IF以提早逃脱)
  6. 优化如果testing首先返回最常见的布尔结果,而不是通过Elsepath(即, Falsetesting可能比True更合适)
  7. 在作业的左侧使用Mid$ 。 从VBA的隐藏function

     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 

Trim是变体版本。 如果你在一个string上使用它,它将需要做一个不必要的转换。

Trim$是string版本。 如果您在string上使用它,请使用它。

有趣的一面是: TrimApplication.WorksheetFunction版本做了一些不同于VBA的修剪function。

值得注意的是左/左$,中/ $ $,右/右$也有变体/string版本。 在经常循环或使用这些函数的函数中,如果使用变体版本,您注意到性能受到影响,但对于现代PC而言,它并不是很大,但是如果您知道这会导致额外的步骤你不需要。

trim接受一个variables作为它的参数, trim$接受一个string。

使用trim $有一些性能好处(因为你不是从一个变体转换),但是你可能不会注意到它们。

编辑:

我通过检查对象浏览器来解决这个问题。 当你在VBA编辑器中时,按下F2键,你可以searchfunction并且更熟悉框架。

我相信这个符号是VB时代的遗产,其中$用于表示已经(或在其上操作)string的对象/函数。

从function上来说,没有区别,虽然我知道$版本被认为是更快 ,因为它消除了从一个变体转换为string的需要。