任何等同于PadLeft/PadRight的方法?

Tay*_* K. 42 string vba

只是想知道,VBA与VB .NET的PadLeft和PadRight方法有什么相同之处吗?

到目前为止,每当我想要一个字符串并使其具有前导空格的固定长度时,我会根据字符串的长度执行For ... Next循环.

例如,我将使用以下代码将字符串格式化为带有前导空格的8个字符:

intOrdNoLen = Len(strOrdNo)
For i = 1 To (8 - intOrdNoLen) Step 1
    strOrdNo = " " & strOrdNo
Next
Run Code Online (Sandbox Code Playgroud)

有没有办法在VBA中用更少的行做同样的事情?

Lit*_*les 72

我不相信有任何显式PADLEFTPADRIGHT函数,但您可以使用SPACELEFTRIGHT前面的空格组合,然后获取正确的X个字符.

PADLEFT

strOrdNo = RIGHT(Space(8) & strOrdNo, 8)
Run Code Online (Sandbox Code Playgroud)

如果你想要一个字符而不是空格,你可以使用STRING而不是空格(左边的例子用X填充):

strOrdNo = RIGHT(String(8, "X") & strOrdNo, 8)
Run Code Online (Sandbox Code Playgroud)

PADRIGHT

strOrdNo = LEFT(strOrdNo & Space(8), 8)

strOrdNo = LEFT(strOrdNo & String(8, "X"), 8)
Run Code Online (Sandbox Code Playgroud)

  • 基于PadLeft的描述https://msdn.microsoft.com/en-us/library/92h5dc07(v=vs.110).aspx,此代码与PADLEFT的行为不匹配,因为示例:str.PadLeft (2,"四十二")将返回"佛"而不是"四十二".这不会发生在原始代码中. (2认同)

Bra*_*rad 15

你可以使用这些.将它们放在公共模块中

'如果输入字符串长于总长度,则NB失败

Function PadLeft(text As Variant, totalLength As Integer, padCharacter As String) As String
    PadLeft = String(totalLength - Len(CStr(text)), padCharacter) & CStr(text)
End Function

Function PadRight(text As Variant, totalLength As Integer, padCharacter As String) As String
    PadRight = CStr(text) & String(totalLength - Len(CStr(text)), padCharacter)
End Function
Run Code Online (Sandbox Code Playgroud)


Sul*_*man 7

由于我们通常在左侧填充,因此Format()函数更短,更简单:

Format(number, "    ")

Format(number, "00")
Run Code Online (Sandbox Code Playgroud)


Ern*_*son 5

Format("abc","!@@@@@@") ' width >= 6; pad right side with spaces
Format("abc","@@@@@@") ' width >= 6; pad left side with spaces
Run Code Online (Sandbox Code Playgroud)