VBA: предыдущие нули отбрасываются при копировании
Я создаю копию файла Excel с помощью VBA. В файле есть столбец, содержащий числа с предшествующими нулями. Копия файла создается, но данные в этом столбце удаляются. Мне нужно сохранить значения с предыдущими нулями. Как я могу решить эту проблему с VBA?
5 ответов:
Преобразуйте каждую ячейку в этом столбце в текстовое поле перед его экспортом. Это должно гарантировать, что каждый символ сохраняется (а не рассматривается как число, что и происходит).
Лучший способ-предварительно отформатировать столбец в виде текста, задав диапазон.NumberFormat до "@". Таким образом, если пользователь редактирует ячейку, она останется в виде текста и сохранит начальные нули. Вот пример VBA:
ActiveSheet.Диапазон ("C:C").NumberFormat = " @ "
Дополнительная возможность заключается в добавлении Апострофа к каждой ячейке. Это будет рассматривать все значения как текст, который полезен, когда различные вкладки рассматривают общие значения как текст против числа (т. е. скопированный в vs вычисленный).
Это делается с помощью функции Chr () и присвоения ей символьного кода 39 ('):
For x = 1 to 100 If Sheets(origSheet).Cells(x, "A").Value <> "" Then Sheets(origSheet).Cells(x, "A").Value = Chr(39) & Sheets(origSheet).Cells(x, "A").Value End If
Учитывая принятый ответ, это, вероятно, не то, что вам нужно, но установка пользовательского числового формата также вернет предшествующие нули в отображаемое значение.
Для отображения значения с начальными нулями до 8 цифр, например, установите формат 00000000, тогда 123 будет отображаться как 00000123.
Как метод здесь, так и метод format-as-text приведут к значениям ячеек, которые все еще будут работать в вычислениях, хотя выравнивание по горизонтали будет отличаться на по умолчанию. Обратите также внимание, что, например, объединение строк со значениями приведет к различиям:
Как текст: отображает 00000123, добавьте "x", чтобы получить 00000123x
Как число с пользовательским форматом: отображает 00000123, добавьте "x", чтобы получить 123x, потому что это все еще действительно число.
Хотя, наверное, ТМИ!
Вот код, который я создал, чтобы решить эту проблему:
Public Sub Change_10_Digit() '---------------------------------------------------------------------------- ' Change numeric loan number ot a 10 digit text number ' 2010-05-21 by Jamie Coxe ' ' Note: Insure exracted data Column is formated as text before running macro '---------------------------------------------------------------------------- Dim Lastrow As Long Dim StartRow As Long Dim Col As String Dim RowNum As Long Dim nCol As String Dim Loan As String Dim Digit_Loan As String Dim MyCell As String Dim NewCell As String Dim Cell_Len As Long Dim MyOption As Long '----- Set Options ------------------------------------------------------- MyOption = 2 '1 = place data in new column, 2 = Replace data in cell StartRow = 2 'Start processing data at this row (skip header row) Col = "B" 'Loan number in this colmun to be changed to 10 digit nCol = "G" 'New column to place value (option 1 only) '----- End Option Setings ------------------------------------------------ 'Get last row Lastrow = Range(Col & "65536").End(xlUp).Row For RowNum = StartRow To Lastrow 'Combined Column and Row number to get cell data MyCell = Col & RowNum 'Get data in cell Loan = Range(MyCell).Value 'Change data in cell to 10 digit numeric with leading zeros Digit_Loan = Format(Loan, "0000000000") If My0ption = 1 Then 'Option 1 enter value in new cell NewCell = nCol & RowNum Range(NewCell).Value = Digit_Loan Else 'Option 2 replace value in cell Range(MyCell).Value = Digit_Loan End If Next RowNum End Sub