Просто интересно, есть ли эквивалент в VBA для методов VB.NET PadLeft и PadRight?
Как сейчас, всякий раз, когда я хочу взять строку и сделать ее фиксированной длиной с ведущими пробелами, я делаю цикл For... Next на основе длины строки.
Например, я бы использовал следующий код для форматирования строки до 8 символов с ведущими пробелами:
intOrdNoLen = Len(strOrdNo)
For i = 1 To (8 - intOrdNoLen) Step 1
strOrdNo = " " & strOrdNo
Next
Есть ли способ сделать то же самое в меньшем числе строк в VBA?
Я не считаю, что существуют явные функции PADLEFT
или PADRIGHT
, но вы можете использовать комбинацию SPACE
и LEFT
или RIGHT
для добавления пробелов к вашей строке, а затем захватить справа X количество символов.
PADLEFT
strOrdNo = RIGHT(Space(8) & strOrdNo, 8)
Если вам нужен символ вместо пробелов, вы можете использовать STRING
вместо пространства (пример ниже левых площадок с X):
strOrdNo = RIGHT(String(8, "X") & strOrdNo, 8)
PADRIGHT
strOrdNo = LEFT(strOrdNo & Space(8), 8)
strOrdNo = LEFT(strOrdNo & String(8, "X"), 8)
Вы можете использовать их. Поместите их в открытый модуль
'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
Поскольку мы обычно размещаем на левой стороне, функция Format() короче, проще:
Format(number, " ")
Format(number, "00")
? "!" & Format("a"," ") & "!"
и вы получите !a!
и с номером ? "!" & Format(1.23," ") & "!"
дает ! !
Format("abc","!@@@@@@") ' width >= 6; pad right side with spaces
Format("abc","@@@@@@") ' width >= 6; pad left side with spaces
Вы также можете использовать строки фиксированной длины в VBA:
Dim myString As String * 10
myString = "test"
Debug.Print myString, "(" & Len(myString) & ")" '// Prints "test (10)"
хотя это полезно только для заполнения справа.