2013-09-17 4 views
2

Следующий код отбрасывает ведущие нули, когда они включены в столбец. Я думал, что PasteSpecial позаботится об этом. Есть ли способ гарантировать, что любые ведущие нули сохраняются, когда этот sub заполняет CSV?Excel VBA не будет вставлять ведущие нули

Sub PasteStufff() 

Dim myRange As Range 
Dim outFile As String 

outFile = "mypath\path\file.csv" 

Set myRange = Sheets("base").Range("A1:G1") 
Set myRange = Range(myRange , myRange .End(xlDown)) 
Sheets("base").Select 
myRange.Select 
Selection.Copy 
    Workbooks.Add 
    ActiveSheet.Cells(1, 1).PasteSpecial xlPasteValues 
    ActiveWorkbook.SaveAs Filename:= _ 
    outFile _ 
    , FileFormat:=xlCSV, CreateBackup:=False 
    Application.DisplayAlerts = False 
    ActiveWorkbook.Close 
    Application.DisplayAlerts = True 

End Sub 
+0

Как начинаются начальные нули? Используется ли апостроф или пользовательский формат для ячеек, или ячейки отформатированы как текст? Являются ли ведущие нули потерянными при вставке или после сохранения и повторного открытия csv (в Excel)? –

+0

Я уверен, что вы захотите вставить специальные форматы, а также значения. – Stepan1010

+0

Формат диапазона в виде текста. – Sorceri

ответ

3

Я не знаю, в какой версии она была введена, но в Excel 2010 можно использовать

Paste:=xlPasteFormulasAndNumberFormats 

вместо

Paste := xlPasteValues 

и на основе очень короткого тестирования, этот кажется, работает (при условии, что ваши исходные входы - это номера в первую очередь).

+0

Да, это действительно так просто. – Stepan1010

+0

Я неправильно говорил, это действительно работает! –

3

Excel очень неприятный, когда дело доходит до ведущих нулей. Единственный способ, который я нашел, чтобы выполнить эту работу, - это все ячейки, которые будут получать вставленные данные, предварительно отформатированные как «Текст». Не «Генерал» или что-то еще, просто «Текст». Вы должны отформатировать ячейки как «Текст» перед вставкой данных. Если вы попытаетесь сделать это после того, как данные будут вставлены, ведущие нули уже будут потеряны.

Если вы это сделаете, вам даже не понадобится PasteSpecial.

PasteSpecial не будет иметь эффекта, если ячейки назначения не будут отформатированы правильно. Excel всегда будет пытаться интерпретировать все, что выглядит как число, как число.

Это абсолютно не идеально, потому что это может потребовать, чтобы вы подсчитали все свои данные, а затем отформатировали только столько ячеек на листе, но это единственный метод, который я нашел, который является надежным.

+1

9,999 выглядит хорошо, но 10k, вероятно, будет выглядеть лучше :) –

+0

@ Andy G, вы правы, 10K определенно выглядит лучше. :) И да, всем, кто читает это, мы полностью злоупотребляем секцией комментариев. : O – Stewbob

+2

Если ведущие нули применяются к csv, но файл снова открывается в Excel, то Excel, скорее всего, удалит их снова. Чтобы это предотвратить, используйте вкладку «Данные», «Получить внешние данные» и отформатируйте столбец как «Текст» с помощью мастера импорта текста. Шаги [изложенные здесь] (http://www.upenn.edu/computing/da/bo/webi/qna/iv_csvLeadingZeros.html) –

Смежные вопросы