VBA Insertar fecha como numero en hoja desde un label o textbox

buenas, he intentado insertar fechas desde un label o un textbox de un formulario en una hoja pero en forma de numero por ejemplo

textbox o label: 12/12/2012

celda:40234

intente con formatnumber incluso con la grabadora de macros y nada

la razón es porque necesito una columna con las fechas convertidas en números para realizar formulas que me están generando errores como: N/A o nombre?

el formulario ingresa datos nuevos a la base de datos cosa que me funciona bien aunque algo lento, la cual es esta

Public Sub Datos()
'On Error Resume Next
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
ActiveSheet.Unprotect "entrar"
For i = 1 To ReCantidad Step 1
Range("B7").Select
Do While Not IsEmpty(ActiveCell)
    ActiveCell.Offset(1, 0).Select
Loop
ActiveSheet.Unprotect "entrar"
With Rows(ActiveCell.Row)
    .Font.Size = 10
    .Font.Name = "Tahoma"
    .RowHeight = 13
End With
ActiveCell = CDbl(ReCodigo)
ActiveCell.Font.Bold = True
ActiveCell.Offset(0, 1) = ReCategoria
If IsNumeric(ReFactura) Then
     ActiveCell.Offset(0, 2) = CDbl(ReFactura)
  Else
     ActiveCell.Offset(0, 2) = ReFactura
End If
ActiveCell.Offset(0, 3).FormulaR1C1 = "=SUMPRODUCT(1*(R7C4:R65536C4=RC4))"
ActiveCell.Offset(0, 4).FormulaR1C1 = Evaluate("=ROW()-7")
If ReReferencia.Visible = False Then
     ActiveCell.Offset(0, 5) = ""
  Else
     ActiveCell.Offset(0, 5) = CDbl(ReReferencia)
End If
ActiveCell.Offset(0, 6) = ReDescripcion
ActiveCell.Offset(0, 7) = ReEstado
ActiveCell.Offset(0, 8) = ReFecha
ActiveCell.Offset(0, 9) = Date
ActiveCell.Offset(0, 11) = CDbl(ReVaUnitario)
ActiveCell.Offset(0, 11).Font.Bold = True
ActiveCell.Offset(0, 12).FormulaR1C1 = "=SUMPRODUCT((R7C4:R65536C4=RC4)*R7C13:R65536C13)"
ActiveCell.Offset(0, 12).Font.Bold = True
ActiveCell.Offset(0, 13).FormulaR1C1 = "=IF(RC17=0,0,DATEDIF(RC10,R4C35+1,""Y""))"
ActiveCell.Offset(0, 14).FormulaR1C1 = "=IF(RC17=0,0,DATEDIF(RC10,R4C35+1,""YM""))"
ActiveCell.Offset(0, 15).FormulaR1C1 = "=IF(DAYS360(RC10,R4C35)<0,0,DAYS360(RC10,R4C35))"
ActiveCell.Offset(0, 16).FormulaR1C1 = "=IF(DED(RC2)<RC17,RC13,DACUM(RC13,DEP(RC2),RC17))"
ActiveCell.Offset(0, 17).FormulaR1C1 = "=IF(DED(RC2)<RC17,0,IF(RC17=0,0,IF(RC17<30,DACUM(RC13,DEP(RC2),RC17),IF(DED(RC2)-RC17>=30,DMEN(RC13,DEP(RC2)),IF(DED(RC2)-RC17=0,0,DACUM(RC13,DEP(RC2),DED(RC2)-RC17))))))"
ActiveCell.Offset(0, 18).FormulaR1C1 = "=IF(DED(RC2)<RC17,0,IF(RC17=0,0,IF(RC17<360,DACUM(RC13,DEP(RC2),RC17),IF(DED(RC2)-RC17>=360,RC13*DEP(RC2),IF(DED(RC2)-RC17=0,0,DACUM(RC13,DEP(RC2),DED(RC2)-RC17))))))"
ActiveCell.Offset(0, 19).FormulaR1C1 = "=IF(RC[-3]=0,0,IF(RC[-4]=0,0,RC[-8]-RC[-3]))"
ActiveCell.Offset(0, 19).Font.Bold = True
ActiveCell.Offset(0, 20).FormulaR1C1 = "=IF(RC[-1]=0,0,IF(RC[-5]=0,0,RC[-8]-DACUM(RC[-8],DEP(RC[-20]),RC[-5])))"
ActiveCell.Offset(0, 20).Font.Bold = True
'Datos de año anterior al 30/Diciembre
ActiveCell.Offset(0, 23).FormulaR1C1 = "=IF(RC17=0,0,DATEDIF(RC10,R6C35+1,""Y""))"
ActiveCell.Offset(0, 24).FormulaR1C1 = "=IF(RC16=0,0,DATEDIF(RC10,R6C35+1,""YM""))"
ActiveCell.Offset(0, 25).FormulaR1C1 = "=IF(DAYS360(RC10,R6C35)<0,0,DAYS360(RC10,R6C35))"
ActiveCell.Offset(0, 26).FormulaR1C1 = "=IF(DED(RC2)<RC[-1],0,DACUM(RC13,DEP(RC2),RC[-1]))"
ActiveCell.Offset(0, 27).FormulaR1C1 = "=IF(DED(RC2)<RC[-2],0,IF(RC[-2]=0,0,IF(RC[-2]<30,DACUM(RC13,DEP(RC2),RC[-2]),IF(DED(RC2)-RC[-2]>=30,DMEN(RC13,DEP(RC2)),IF(DED(RC2)-RC[-2]=0,0,DACUM(RC13,DEP(RC2),DED(RC2)-RC[-2]))))))"
ActiveCell.Offset(0, 28).FormulaR1C1 = "=IF(DED(RC2)<RC[-3],0,IF(RC[-3]=0,0,IF(RC[-3]<360,DACUM(RC13,DEP(RC2),RC[-3]),IF(DED(RC2)-RC[-3]>=360,RC13*DEP(RC2),IF(DED(RC2)-RC[-3]=0,0,DACUM(RC13,DEP(RC2),DED(RC2)-RC[-3]))))))"
ActiveCell.Offset(0, 29).FormulaR1C1 = "=IF(RC[-3]=0,0,IF(RC[-4]=0,0,RC13-RC[-3]))"
ActiveCell.Offset(0, 30).FormulaR1C1 = "=IF(RC[-4]=0,0,IF(RC[-5]=0,0,RC14-DACUM(RC14,DEP(RC2),RC[-5])))"
ultima = Range("F900000").End(xlUp).Row
Range("B" & ultima & ":V" & ultima).Select
PintaBerde
Range("M" & ultima & ":N" & ultima).Select
PintaRellTotal
Range("O" & ultima & ":T" & ultima).Select
PintaBanja
Range("U" & ultima & ":V" & ultima).Select
PintaRellTotal
Next i
Range("B6:V6").BorderAround LineStyle:=xlContinuous
ActiveSheet.Unprotect "entrar"
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.CutCopyMode = False
End Sub

la columna estará oculta a partir de la 22 por eso que el código debe entrar a esta

ActiveCell.Offset(0, 22) = ReFecha

ReFecha es el nombre del label

uso excel 2007/2010

espero haber detallado bien la duda

1 Respuesta

Respuesta
1

Los Label y Textbox entre otros, conservan sus datos como 'texto'. Hay que convertirlos a lo que se necesite con algunas de las funciones VBA, en este caso CDate.

ActiveCell.Offset(0, 22) = CDate(ReFecha)

De este modo podrás realizar cálculos sin necesidad de convertirlos a número. De todos modos si x alguna razón que desconozco la necesitas como 40234 eso lo podes conseguir formateando la celda, desde la hoja misma o con esta instrucción:

ActiveCell.Offset(0, 22).NumberFormat = "0"

PD) Cuando finalices con esta consulta dejame otra en el tablón para que te pase algunas sugerencias para mejorar tu código.

muchas gracias doña Elsa, por ayudarme, si efectivamente parece que necesito convertirlo en numero, por la definición de un nombre como rango dinámico

NOMBRE: BDFEC 
FORMULA: =DESREF('BASE DE DATOS'!$J$6;1;0;CONTARA('BASE DE DATOS'!$J:$J))

lo intente con contar también sin resultados y las formulas son como esta

=SUMAPRODUCTO((--BDCOD<>B9)*(--BDFEC<=$M$3)*(--BDVOR))

en donde BDCOD B9 y BDVOR son números y BDFEC y M3 son fechas y BDFEC es el causante de todo el problema

al principio solo puse la primera linea no sirvió, luego puse las dos lineas sirvió aunque no me siento seguro, pues me genera problemas con las formulas, que cansado es trabajar con fechas...

ActiveCell.Offset(0, 22) = CDate(ReFecha)
ActiveCell.Offset(0, 22).NumberFormat = "0"

saludos cordiales

La función de Conversión resuelve tu problema para que lo ingresado en la celda sea considerado como fecha. La línea siguiente solo es una cuestión de formato que no le hace al resto de las fórmulas, pero resuelve tu consulta acerca de insertar fecha como número (y siga siendo una fecha).

Por lo tanto finaliza esta consulta resuelta y dejá la nueva en el tablón para que revise el nuevo tema. Enviame un correo con la hoja donde vayan las fórmulas (con la fórmula manual que efectivamente funciona) y yo te ajusto el código.

Podes tomar el correo que aparece en mi sitio que dejo al pie o dejarme uno tuyo para que te solicite la hoja.

borre los formatos completamente de la hoja y con lo que me dijiste me funciono mucho mejor muchísimas gracias, voy a abrir el otro tema y te envío el archivo muchísimas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas