VBA: предыдущие нули сбрасываются при копировании - PullRequest
4 голосов
/ 30 января 2009

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

Ответы [ 5 ]

7 голосов
/ 30 января 2009

Лучший способ - предварительно отформатировать столбец как текст, установив Range.NumberFormat в «@». Таким образом, если пользователь редактирует ячейку, ячейка останется в виде текста и сохранит свои ведущие нули. Вот пример VBA:

ActiveSheet.Range ("C: C"). NumberFormat = "@"

4 голосов
/ 30 января 2009

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

2 голосов
/ 19 апреля 2012

Дополнительная возможность - добавить апостроф в каждую ячейку. Это будет обрабатывать все значения как текст, что полезно, когда разные вкладки рассматривают общие значения как текст против числа (т.е. копируются в против вычисленного).

Это делается с помощью функции 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
0 голосов
/ 21 мая 2010

Это код, который я создал для решения этой проблемы:

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
0 голосов
/ 30 января 2009

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

Чтобы показать значение с начальными нулями до 8 цифр, например, установите формат в 00000000, тогда 123 будет отображаться как 00000123.

И метод здесь, и метод format-as-text приведут к значениям ячеек, которые все равно будут работать в вычислениях, хотя горизонтальное выравнивание будет другим по умолчанию. Также обратите внимание, что, например, конкатенация строк со значениями приведет к различиям:

как текст: отображает 00000123, добавьте «x», чтобы получить 00000123x

как число с пользовательским форматом: отображает 00000123, добавьте «x», чтобы получить 123x, потому что это действительно число.

Вероятно, TMI, хотя!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...