cuando ejecuto buscar y reemplazar a través de vba, cambia mis fechas a nuestro formato. Así que tengo una columna de fechas, pero todas tienen un prefijo con el texto que quiero eliminar (como Fecha de la factura: dd/mm/aaaa). Cuando uso Ctrl + F y reemplazo manualmente, todo es genial. Elimina el texto, la fecha permanece en su formato original dd/mm/yyyy. Sin embargo, cuando se usa vba para hacer esto, cambia las fechas a mm/dd/yyyy si el día es menor a 12 (es decir, meses en un año). He probado varios métodos diferentes para convertirlo, pero todos parecen tener el mismo problema. Aquí está mi último fracaso...
Sub DateConvert() Sheets("Sheet1").Select Dim strValue As String Dim RowCount As Integer Dim x As Integer Dim DateValue As Date RowCount = WorksheetFunction.CountA(Range("C1", Range("C1").End(xlDown))) For x = 2 To RowCount 'changes cell value to a string strValue = Cells(x, 3).Value 'removes unwanted text Cells(x, 3).Replace _ What:="Invoice Date:", Replacement:="" 'changes to string to desired date format DateValue = Cells(x, 3).NumberFormat = "dd/mm/yyyy" Next x End Sub
Por favor, que alguien me libre de esta miseria antes de que la computadora portátil o yo salgamos por la ventana. Gracias por adelantado
Las fechas son extremadamente molestas para trabajar. Su mejor apuesta para asegurarse de que está trabajando con la fecha correcta es usar la función DateSerial y luego formatear la salida como desee:
Sub DateConvert() Dim ws As Worksheet: Set ws = ActiveWorkbook.Worksheets("Sheet1") Dim rData As Range: Set rData = ws.Range("C2", ws.Cells(ws.Rows.Count, "C").End(xlUp)) If rData.Row < 2 Then Exit Sub 'No data 'Load range data into an array Dim aData() As Variant If rData.Cells.Count = 1 Then ReDim aData(1 To 1, 1 To 1) aData(1, 1) = rData.Value Else aData = rData.Value End If 'Loop over array and perform conversion Dim aDateValues As Variant Dim i As Long For i = 1 To UBound(aData, 1) aDateValues = Split(Replace(aData(i, 1), "Invoice Date:", vbNullString), "/") 'Remove the extra text and pull the date values aData(i, 1) = DateSerial(aDateValues(2), aDateValues(1), aDateValues(0)) 'Use DateSerial to guarantee correct date Next i 'Output results to sheet with desired date format With rData .Value = aData .NumberFormat = "dd/mm/yyyy" End With End Sub