
Мне нужна функция, которая проходит по закрытым рабочим книгам, имеющим некоторые параметры, заданные из ячеек другой рабочей книги. Цель состоит в том, чтобы подсчитать количество людей, находящихся в некоторых местах, учитывая месяц. Я получаю #VALUE
ошибку при передаче параметров в лист.
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
решение1
Пользовательские функции в VBA имеют определенные ограничения, например, невозможность изменять другую ячейку, открывать рабочие книги и т. д.
Посмотрите здесь
https://stackoverflow.com/questions/46782402/can-excel-vba-function-open-a-file
И здесь
https://stackoverflow.com/questions/7693530/excel-vba-cant-open-workbook
Единственный способ обойти эту проблему — открыть другой экземпляр Excel в UDF, что может быть ресурсоемким упражнением (см. ссылки). Обязательно закройте и выйдите из всех рабочих книг и не вызывайте эту UDF как часть вызова изменчивой функции, которая будет все время пересчитывать данные и замедлять вашу рабочую книгу.
Или перепишите свой код так, чтобы он выполнялся из подпрограммы/макроса, связанного с кнопкой, например, «обновить из внешних рабочих книг».