Создать префикс номера в VBA - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть несколько номеров ревизий, из которых мне нужно создавать папки. Итак, допустим, {4, 12, 534}. Исходя из этого, мне нужно создать папки, которые могут быть отсортированы соответственно;

\004\..
\012\..
\534\..

Итак, мне нужно получить наибольшее число, а затем посмотреть, сколько заполняющих нулей мне нужно для каждого Foldername, чтобы они правильно сортировались после их создания.

Как я могу сделать это с помощью VBA (Excel)? Я попытался преобразовать их в строки и затем заняться операциями со строками, но это не совсем сработало.

Я надеюсь, у кого-то есть хорошая идея для этого ...

Ответы [ 3 ]

7 голосов
/ 26 апреля 2011

Самый простой способ - с Format (или Format$):

dim s As String

    s = Format$(revNum, "000")

Использование "000" в качестве «строки формата» указывает функции заполнять начальными нулями, тогда как "###" говорит, что заполнять не следует. Разница между версиями функции заключается в типе возвращаемого значения: Format возвращает вариант (String), а Format$ возвращает действительную строку.

1 голос
/ 26 апреля 2011

Легче всего предварительно вычислить макс, затем повторить цикл и заполнить;

Dim nums() As String: nums = Split("4,12,534,9999", ",")
Dim i As Long
Dim max As Long

For i = 0 To UBound(nums)
    If (Len(nums(i)) > max) Then max = Len(nums(i))
Next

For i = 0 To UBound(nums)
    nums(i) = String(max - Len(nums(i)), "0") & nums(i)
    Debug.Print nums(i)
Next
0 голосов
/ 26 апреля 2011

Я не уверен, почему простая строковая операция не сработает.

Select Case Len(folderstring)
  Case 1
    folderstring = "00" & folderstring
  Case 2
    folderstring = "0" & folderstring
  Case Else
    ' Do nothing here
End Case

OR

Dim zeroarray(1 To 3) As Variant

zeroarray = Array("00","0","")
folderstring = zeroarray(Len(folderstring)) & folderstring
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...