VBA字符串空格:首选方法?

时间:2014-10-27 19:30:15

标签: string vba concatenation space

连接字符串时,有多种有效的插入空格的方法。

空间功能:

Print "A" & Space(1) & "B"
A B

VS

行情:

Print "A" & " " & "B"
A B

VS

人权委员会:

Print "A" & Chr(32) & "B"
A B

所有三种方法都会产生相同的结果。我发现Space有益的唯一地方是使用变量作为空格数。

Space( <expression of number - len(var)> )

任何人都可以提供任何有关为什么一种方法比另一种方法更好的见解?

3 个答案:

答案 0 :(得分:6)

正如所建议的,它们在编译时都会产生相同的结果。可能存在情境效益,例如:

1)Space() - 当需要多个空间时很好 Space(100) 优于 chr(32)&amp; chr(32)&amp; chr(32)&amp; ......

2)" " - 易于理解的视觉表达,尤其适用于新的vba学习者 编辑:也比方法调用快,感谢Blackhawk指出

3)chr() - 可用于打印特定字符以表示文本文件的字符表达式。例如。使用 chr(10) 打印 Enter / Return 。但我没有看到任何明显的打印空间好处

答案 1 :(得分:1)

也许有性能差异?你可以自己测试一下!请参阅the code at this answer related to the performance counters以获得有用的VBA计时器类。

以下是(Excel-ish)VBA中此类计时的一个示例:

Option Explicit

Sub DoTimings()
    Dim oTimer As New CTimer
    Dim fTimer(3) As Double

    Dim iiter As Long
    Const ITERATIONS As Long = 10000

    oTimer.StartCounter
    For iiter = 1 To ITERATIONS
        Debug.Print "A" & Space(1) & "B"
    Next
    fTimer(1) = oTimer.TimeElapsed

    oTimer.StartCounter
    For iiter = 1 To ITERATIONS
        Debug.Print "A" & " " & "B"
    Next
    fTimer(2) = oTimer.TimeElapsed

    oTimer.StartCounter
    For iiter = 1 To ITERATIONS
        Debug.Print "A" & Chr(32) & "B"
    Next
    fTimer(3) = oTimer.TimeElapsed

    Range("A1").Value = "Spaces: "
    Range("B1").Value = fTimer(1)
    Range("A2").Value = "Quotes: "
    Range("B2").Value = fTimer(2)
    Range("A3").Value = "Chr: "
    Range("B3").Value = fTimer(3)

End Sub

当我在我的机器上运行时,差异可以忽略不计或由其他因素支配(最明显的是你要打印到的任何I / O)。所以可以很自然地说,没有任何明显的性能差异,你可以从可维护性的角度使用最有意义的东西。

答案 2 :(得分:1)

使用字符串文字应该是最快的,因为其他两个是函数。正如您所指出的那样,它很容易理解,但是当您需要多个空格时,@Alex pointed out Space()肯定更好。我总是喜欢文字或space()而不是chr(32)。对于维护人员来说,chr(32)非常模糊。

你还有另外一个选择。创建常量。

Const space As String = " "

这具有space(1)的所有可读性以及文字" "的性能。另外一个好处是,内存中只有一个常量实例,其中每个实例都会显示一次。


如果您决定使用chr(32),那么使用它的字符串版本会很有用:chr$(32)。常规版本返回变量,而字符串版本返回字符串。变体有一些额外的开销,可以在这里避免。