Funktion gibt #VALUE-Fehler beim Erwarten einer Ganzzahl in VBA zurück

Funktion gibt #VALUE-Fehler beim Erwarten einer Ganzzahl in VBA zurück

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. #VALUEBeim Ü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.

verwandte Informationen