
다른 통합 문서의 셀에서 제공된 일부 매개 변수를 사용하여 닫힌 통합 문서를 반복하는 함수를 원합니다. 목표는 한 달을 고려하여 일부 위치에 있는 사람의 수를 계산하는 것입니다. #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를 항상 다시 계산하여 통합 문서 속도를 저하시키는 휘발성 함수 호출의 일부로 호출하지 않도록 하십시오.
또는 "외부 통합 문서에서 새로 고침"과 같은 버튼에 연결된 하위/매크로에서 실행되도록 코드를 다시 작성하세요.