Tengo una función VBA dentro de una hoja de cálculo que funciona en otra hoja de cálculo que se abre en una etapa anterior de mi macro. La macro solía funcionar bien, pero recientemente comenzó a causar un error ("No se puede obtener la propiedad RoundDown de la clase WorksheetFunction") cuando se ejecuta.Error de Excel 1004 "No se puede obtener ... propiedad de la clase WorksheetFunction" que aparece de forma incoherente
Creo que entiendo cuál sería el error causado (un problema al ejecutar RoundDown) pero no puedo ver por qué se dispara en mi macro y la parte más rara es que cuando voy al modo de depuración y paso por el código en el VBE el error no se repite (a pesar de que nada obviamente cambia).
¿Alguien tiene una experiencia similar de este tipo de error que ocurre de forma inconsistente y sabe lo que podría hacer para resolverlo?
Soy razonablemente VBA/experto en Excel, pero cualquier sugerencia sobre los pasos posteriores para diagnosticarlo sería apreciada. Me pregunto si hay algún problema con la hoja de cálculo abierta que no está lista pero no veo cómo.
El código está aquí. El error ocurre en la línea marcada con un comentario.
Public Function GetDatesA(sWorkbookname As String, sSheetname As String, sCell As String) As Variant
Dim vDateList() As Variant
Dim currentCell As Range
Dim n As Long
Set currentCell = Workbooks(sWorkbookname).Worksheets(sSheetname).Range(sCell)
n = 0
Do
If Trim(currentCell.Value) = "" Then
Exit Do
Else
ReDim Preserve vDateList(0 To 1, 0 To n)
vDateList(0, n) = WorksheetFunction.RoundDown(currentCell.Value, 0) 'error occcurs on this line
vDateList(1, n) = currentCell.Column
'Debug.Print currentCell.Value
End If
Set currentCell = currentCell.Offset(0, 1)
n = n + 1
Loop While currentCell.Column < XL_LAST_COLUMN
GetDatesA = vDateList
End Function
Otros detalles son:
versiónExcel: 2010
archivo se abre reside localmente en mi C: conducir; mi macro está en una hoja de cálculo en la red
Formato de archivo para ambos archivos es .xls (es decir, Excel 2003) - no tengo la opción de cambiar esta
Windows 7 (no es que creo sería pertinente)
dos puntos que he probado ya son:
sustituir una función de hoja de cálculo diferente (por ejemplo, Min (currentCell)) y TH también causa el mismo problema
Tener el archivo abierto ya parece detener el problema - Me pregunto si hay alguna forma de que el libro de trabajo que se está abriendo (en lugar de mi libro principal con la macro) no sea habilitado para macros y esto está interfiriendo. ¡Pero incluso si esta es la causa, no estoy seguro de cómo solucionarlo!
¿Alguna idea?
Si inserta 'Debug.Print currentCell.Value' justo antes de' vDateList (0, n) = WorksheetFunction.RoundDown (currentCell.Value, 0) ', lo que hacer ¿usted obtiene? ¿Es un número válido? –
También cambie 'WorksheetFunction.RoundDown (currentCell.Value, 0)' a 'Application.WorksheetFunction.RoundDown (currentCell.Value, 0)' –
¡Gracias! Le di una oportunidad. Obtengo una lista de fechas (de hecho números: se muestran como una fecha a menos que multiplique por 1 para obtener el número de Excel correspondiente a la fecha). Definitivamente todos pasan bien si paso por el código pero no lo hago si lo dejo funcionar solo (cuando recupera los mismos valores exactos), por lo que probablemente sea algo acerca de la función WorksheetFunction en lugar de mis datos incorrectos. Ahora estoy trabajando en el uso de "En caso de error ...": parece haber error solo la primera vez, por lo que es posible que primero haga una llamada arbitraria a la función Hoja de cálculo con En reanudar siguiente y luego se apaga después. – Neil