A continuación es un Sub que se utiliza para dar formato a todas las celdas como texto en la hoja de cálculo de partida con worksheet3 en adelante. Como verás hay una línea en negrita que yo va más probable es que necesite cambiar. Uno de los propósitos de la línea es mantener los valores de la Columna 1 («ID de Cliente») intacto debido a que en cada hoja se compone ‘00001’ valores se convierte con este código cambia a ‘1’. Lo que está mal. Lo importante es que Column1 en cada hoja de cálculo contiene siempre el mismo ‘00001’ valores.

Sub formatAllCellsAsText()

Dim wsTemp As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range
Dim Cell As Range

For sht = 3 To Worksheets.Count
    Set wsTemp = Sheets(sht)
    Set StartCell = wsTemp.Range("A4")
    LastRow = wsTemp.Range("A4").CurrentRegion.Rows.Count
    LastColumn = wsTemp.Range("A4").CurrentRegion.Columns.Count
    For Each Cell In wsTemp.Range(StartCell, wsTemp.Cells(LastRow, LastColumn)).Cells

    If Not IsEmpty(Cell.Value) And IsNumeric(Cell.Value) 
    And InStr(wsTemp.Cells(1, Cell.Column), "Client ID") <= 0 Then

        Dim Temp As Double
        Temp = Cell.Value
        Cell.ClearContents
        Cell.NumberFormat = "@"
        Cell.Value = CStr(Temp)
      End If
    Next
Next sht

End Sub

Ahora mi problema es que en una hoja de cálculo hay Column6 («Valor») que yo quiero preseve 000s delante de un número. Cuando yo cambie la línea siguiente mi macro todavía elimina anterior 000s de la Column6 valores. Supongo que la condición no es tan sencillo como lo he pensado.

If Not IsEmpty(Cell.Value) And IsNumeric(Cell.Value) And 
InStr(wsTemp.Cells(1, Cell.Column), "Client ID") <= 0 And 
InStr(wsTemp.Cells(6, Cell.Column), "Value") <= 0 Then

Alguna sugerencia?

  • puede cambiar el formato de la celda/columna de un formato personalizado para mostrar los ceros a la izquierda si usted sabe que su ID de Cliente es un número de conjunto de caracteres. De esa manera usted todavía puede tratar como un número. Puede establecer este formato a través de VBA pero en excel formatos personalizados sería algo así como 0000000 si su código de cliente fue de 7 dígitos de largo.

2 Comentarios

  1. 2

    Pls intente esto:

    Sub formatAllCellsAsText()
      Dim wsTemp As Worksheet
      Dim LastRow As Long, LastColumn As Long
      Dim StartCell As Range, Cell As Range
      Dim Temp As Double
      Dim Temp2 As String
      For sht = 3 To Worksheets.Count
        Set wsTemp = Sheets(sht)
        Set StartCell = wsTemp.Range("A4")
        LastRow = wsTemp.Range("A4").CurrentRegion.Rows.Count
        LastColumn = wsTemp.Range("A4").CurrentRegion.Columns.Count
        For Each Cell In wsTemp.Range(StartCell, wsTemp.Cells(LastRow, LastColumn)).Cells
          If Not IsEmpty(Cell.Value) And IsNumeric(Cell.Value) And InStr(wsTemp.Cells(1, Cell.Column), "Client ID") <= 0 Then
            Temp = Cell.Value
            Temp2 = Cell.NumberFormat
            Cell.ClearContents
            Cell.NumberFormat = "@"
            Cell.Value = Format(Temp, Temp2)
          End If
        Next
      Next
    End Sub

    Simplemente comprobar el formato de número y, a continuación, aplicar a la cadena. De esta manera «0001» se mantiene «0001». Otra forma sería el uso de .Text

    Dim Temp As String
    Temp = Cell.Text
    Cell.ClearContents
    Cell.NumberFormat = "@"
    Cell.Value = Temp

    Usted también puede hacer esto sólo si If IsNumeric(Cell.Value) And Left(Cell.Text, 1) = "0" Then es verdad, de modo que la regla sólo se aplica a las celdas con valores numéricos tener ceros a la izquierda 😉

  2. 0

    Column1 en cada hoja de cálculo contiene siempre el mismo ‘00001’ valores.

    Cambiar la línea

    Cell.Value = CStr(Temp)

    a

    Cell.Value = Format(Temp,"00000")

Dejar respuesta

Please enter your comment!
Please enter your name here