
Ich möchte eine Funktion, die geschlossene Arbeitsmappen durchläuft und einige Parameter aus Zellen einer anderen Arbeitsmappe enthält. Ziel ist es, die Anzahl der Personen, die sich pro Monat an bestimmten Orten aufhalten, zu zählen. #VALUE
Beim Übergeben von Parametern im Arbeitsblatt tritt ein Fehler auf.
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
Antwort1
UDF in VBA unterliegen bestimmten Einschränkungen, z. B. der Unfähigkeit, eine andere Zelle zu ändern, Arbeitsmappen zu öffnen usw.
Schauen Sie hier
https://stackoverflow.com/questions/46782402/kann-excel-vba-function-open-a-file
Und hier
https://stackoverflow.com/questions/7693530/excel-vba-kann-workbook-nicht-öffnen
Die einzige Problemumgehung besteht darin, eine weitere Instanz von Excel in der UDF zu öffnen, was eine ressourcenintensive Übung sein kann (siehe Links). Stellen Sie sicher, dass Sie alle Arbeitsmappen schließen und beenden und dass Sie diese UDF nicht als Teil eines volatilen Funktionsaufrufs aufrufen, der ständig neu berechnet und Ihre Arbeitsmappe verlangsamt.
Oder schreiben Sie Ihren Code so um, dass er stattdessen von einem Sub/Makro ausgeführt wird, das mit einer Schaltfläche verknüpft ist, die beispielsweise „Aus externen Arbeitsmappen aktualisieren“ lautet.