Función que devuelve el error #VALUE al esperar un número entero en VBA

Función que devuelve el error #VALUE al esperar un número entero en VBA

Quiero una función que recorra libros cerrados que tengan algunos parámetros proporcionados por celdas de otro libro. El objetivo es contabilizar el número de presencia de personas en algunas localidades considerando un mes. Recibo #VALUEun error al pasar parámetros en la hoja.

Option Explicit

Public Function count(collega As Range, luogo As Range, mese As Range) As Integer

Dim nomeMese As String
Dim nomeLuogo As String
Dim nomeCollega As String
Dim rangeLuogo As String
Dim stringaMese As String
Dim file As Variant
Dim wb As Workbook
'Dim count As Integer

count = 0
nomeMese = mese
nomeLuogo = luogo
nomeCollega = collega

Select Case True
    Case nomeLuogo = "ponte milvio"
        rangeLuogo = "$A$2:$B$2"
    Case Else
        rangeLuogo = "null"
End Select

Select Case True
    Case nomeMese = "Gennaio"
        stringaMese = "-01-2022"
    Case Else
        stringaMese = "null"
End Select
file = Dir("C:\Users\sbalo\Desktop\Test\*.xlsx") 'la funzione Dir permette di looppare senza specificare...

While (file <> "")
    If InStr(file, stringaMese) > 0 Then 'cerca nella directory il file con il match mese-anno
    Set wb = Workbooks.Open("C:\Users\sbalo\Desktop\Test\" & file)
    count = count + Application.CountIf(wb.Sheets("Foglio1").Range(rangeLuogo), nomeCollega)
    wb.Close SaveChanges:=False
    End If
    file = Dir
Wend
End Function

Respuesta1

Las UDF en VBA están sujetas a ciertas restricciones, como no poder modificar otra celda, abrir libros, etc.

Echa un vistazo aquí

https://stackoverflow.com/questions/46782402/can-excel-vba-function-open-a-file

Y aquí

https://stackoverflow.com/questions/7693530/excel-vba-cant-open-workbook

La única solución es abrir otra instancia de Excel en la UDF, lo que puede requerir muchos recursos (ver enlaces). Asegúrese de cerrar y salir de todos los libros y de no llamar a esta UDF como parte de una llamada a función volátil que volverá a calcular todo el tiempo y ralentizará su libro.

Eso, o reescribir su código para ejecutarlo desde una sub/macro vinculada a un botón que diga, por ejemplo, "actualizar desde libros de trabajo externos".

información relacionada