2012-07-03 3 views
3

Я написал этот код для создания списка адресов электронной почты из номеров филиалов. Все адреса находятся в следующем формате: [email protected]String Formatting Lost

Проблема состоит в том, что некоторые номера ветвей являются 3 цифрами, поэтому перед ними вставлен ноль. 681 становится 0681. Я сделал это, используя специальный формат номера 0000, но поскольку фактическое значение каждого по-прежнему 000, когда создаются адреса электронной почты, начальный ноль утерян.

Могу ли я написать больше кода для копирования формата чисел или мне нужно что-то написать, чтобы сначала найти все трехзначные числа и вставить перед ними 0.

Option Explicit 
Sub Pop_Emails() 
    Dim brno As String 
    Dim i As Integer 
    Dim wks As Worksheet 

    Set wks = Sheets("1A") 
    i = 2 
    Do While i <> 191 
     With wks 
      brno = .Cells(i, 1).Value 
      .Cells(i, 3) = "lp" & brno & "@xxxx.co.uk" 
     End With 
    i = i + 1 
    Debug.Print brno 
    Loop 
End Sub 

ответ

7

Если (i, 1) является "0001" с пользовательским форматом:

brno = .Cells(i, 1).Value 

будет 1, чтобы получить отформатированный значение просто:

brno = .Cells(i, 1).Text 
+1

@AlistairWeir: Пожалуйста, не чувствуйте себя обязанным принять самый быстрый ответ. SO дает качественные ответы более быстрыми. – eggyal

+1

Это хороший ответ, я согласен и поддерживаю себя, но программа должна быть умнее, чем конечный пользователь, создающий документ Excel. Что делать, если пользовательский формат был случайно потерян? При заполнении или форматировании кода это не имеет значения. –

+0

+1 да ты прав :) –

4

Вы можете использовать формат чисел в коде VBA:

.Cells(i, 3) = "lp" & Format(brno, "0000") & "@xxxx.co.uk" 
+0

Хороший ответ, делает работу отлично. –

4

Excel, вероятно, увидеть его как число, так что он автоматически преобразует его для вас. Благодарю MS.

Anywho ... не большое дело, просто используйте PadLeft(), чтобы исправить его.

brno = .Cells(i, 1).Value.PadLeft(4, "0")