
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 #VALUE
un 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".