VBA: предыдущие нули отбрасываются при копировании


Я создаю копию файла Excel с помощью VBA. В файле есть столбец, содержащий числа с предшествующими нулями. Копия файла создается, но данные в этом столбце удаляются. Мне нужно сохранить значения с предыдущими нулями. Как я могу решить эту проблему с VBA?

5 4

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