Функция возвращает ошибку #VALUE при ожидании целого числа в VBA

Функция возвращает ошибку #VALUE при ожидании целого числа в VBA

Мне нужна функция, которая проходит по закрытым рабочим книгам, имеющим некоторые параметры, заданные из ячеек другой рабочей книги. Цель состоит в том, чтобы подсчитать количество людей, находящихся в некоторых местах, учитывая месяц. Я получаю #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 как часть вызова изменчивой функции, которая будет все время пересчитывать данные и замедлять вашу рабочую книгу.

Или перепишите свой код так, чтобы он выполнялся из подпрограммы/макроса, связанного с кнопкой, например, «обновить из внешних рабочих книг».

Связанный контент