Excel VBA高级编程:快速交换字符串

发布: 2009-2-04 11:26  作者: 网络转载  查看: 686次 共有0条评论

高级编程:快速交换字符串

我们要做的是交换两个字符串。
常规的方法:
Sub ChgStr1(s1 As String, s2 As String)
  Dim s$
  s = s1: s1 = s2: s2 = s
End Sub
指针的方法:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Sub ChgStr2(s1 As String, s2 As String)
  Dim tmp&
  CopyMemory tmp, ByVal VarPtr(s1), 4
  CopyMemory ByVal VarPtr(s1), ByVal VarPtr(s2), 4
  CopyMemory ByVal VarPtr(s2), tmp, 4
End Sub
哪一个更快,不说你也知道了。在VB下,编译后,后者比前者要快一倍。VBA下,没有这么悬殊,笔者测试的结果,应该快25%以上。但由于后者不受交换字符串长短的影响,所以在交换长字符串时,优势会更明显。
下面是测试代码,有兴趣试试吧:
注意:有时下面的测试并不能得到上面的结果,但如果你加大两个字符串的长度到一定程度,上面的结论是成立的。
Sub aTest()
  Dim i&, tm&, t1
  Dim s1$, s2$
  tm = 999999  '测试次数
  s1 = "abc"
  s2 = "cde"
  t1 = Timer
  i = 1 To tm
    ChgStr1 s1, s2
  Next i
  Debug.Print Timer - t1
  t1 = Timer
  For i = 1 To tm
    ChgStr2 s1, s2
  Next i
  Debug.Print Timer - t1
End Sub

 

 

相关阅读
大家对 Excel VBA高级编程:快速交换字符串 的评论
最新PPT教程
最新评论
PPT问答