VBA에서 정수를 예상할 때 #VALUE 오류를 반환하는 함수

VBA에서 정수를 예상할 때 #VALUE 오류를 반환하는 함수

다른 통합 문서의 셀에서 제공된 일부 매개 변수를 사용하여 닫힌 통합 문서를 반복하는 함수를 원합니다. 목표는 한 달을 고려하여 일부 위치에 있는 사람의 수를 계산하는 것입니다. #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의 UDF에는 다른 셀 수정, 통합 문서 열기 등과 같은 특정 제한이 적용됩니다.

여기를 보세요

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

그리고 여기

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

유일한 해결 방법은 UDF에서 다른 Excel 인스턴스를 여는 것입니다. 이는 리소스가 많이 소요될 수 있습니다(링크 참조). 모든 통합 문서를 닫고 종료해야 하며, 이 UDF를 항상 다시 계산하여 통합 문서 속도를 저하시키는 휘발성 함수 호출의 일부로 호출하지 않도록 하십시오.

또는 "외부 통합 문서에서 새로 고침"과 같은 버튼에 연결된 하위/매크로에서 실행되도록 코드를 다시 작성하세요.

관련 정보