2011-08-03 9 views
13

Necesito mantener los ceros a la izquierda en una lista de números. Los números se añaden como esto (en un bucle, pero esto es sólo un ejemplo utilizando la (1, 1):¿Cómo recupero un valor de celda de Excel en VBA como se formateó en la hoja de trabajo?

Set cel = Sheet.worksh.Cells(1, 1) 
cel.ColumnWidth = 10 
cel.Value = e.Name 
cel.NumberFormat = "0000" 

Dónde e.Name es el número, algo así como "0720" Este se muestra en la hoja de trabajo justo. bien, pero si hago algo como esto:

Msgbox Sheet.worksh.Cells(1, 1).Value 

consigo "720" necesito que sea "0720", sé que podría comprobar mediante Len() y añadir los ceros de esa manera, pero me preguntaba. si hubiera un acercamiento más directo con el objeto Range que haría esto por mí.

Respuesta

12

Usar este:

Msgbox Format(Sheet.worksh.Cells(1,1).Value, "0000") 
18

Está confundiendo un número con su representación textual.

Quiere la propiedad .Text, no .Value, pero entonces, you might have problems with it.

+6

Cuidado con la propiedad del texto. Si la celda se ve así "####", eso es lo que te devolverá. Es más seguro usar el método de Lance Roberts. Solo una advertencia de la experiencia. – Jon49

7

Aún mejor, si no está seguro de lo que el formato es:

MsgBox Format (Sheet.worksh.Cells (1,1) .Value, hoja. worksh.Cells (1,1) .NumberFormat)

+0

Esto no funciona como se esperaba si NumberFormat es General: cuando se llama a Formato ("397", "General") se obtiene como resultado "Ge0eral". – nvuono

+0

¿El problema que 397 se proporciona a Format() como texto, no es un número? –

Cuestiones relacionadas