HERBERS Excel-Forum - das Archiv

Thema: VBA Excel Funktion geschrieben gibt Return #Wert | Herbers Excel-Forum

VBA Excel Funktion geschrieben gibt Return #Wert
MrSteffen

Guten Tag, ich habe folgendes Problem.
Es gibt die Dateien: Stundenerfassung.xls und Tagesreport_Projekt.xls
Ich will, dass Tagesreport_Projekt.xls die Stundenerfassung öffnet, in ein Sheet geht und dort eine bestimmte Zeile nach einem Wert (den er aus Tagesreport_Projekt.xls hat) sucht. Wenn er diesen Wert gefunden hat, geht er eine Zeile weiter nach unten (dort steht ein int wert) und gibt ihn als returnwert seiner Funktion wieder.
Wenn ich die Funktion in einem vba Formular per Button mit

Private Sub CommandButton1_Click()
Call SumZusatzPersonalKosten("01.01.2010", "Projekt 1")
End Sub

aufrufe klappt alles wunderbar, wenn ich jedoch in Tagesreport_Projekt.xls in C6 =SumZusatzPersonalKosten("01.01.2010";"Projekt 1") schreibe gibt er mir nur #Wert aus und aus dem Direktfenster kann ich entnehmen,dass er nur einmal die Schleife durchläuft.
Code:
Function SumZusatzPersonalKosten(toSearchDatum, toSearchProject)
Dim i, Spaltenanzahl, i2 As Integer
Dim currentWs, Filename, currentWsName As String
'Mengenerfassung
currentWs = "Stundenerfassung"
'Filename = currentMonth & " " & currentYear & "\" & currentWs
Filename = currentWs
'currentWsName = ActiveSheet.Name
SumZusatzPersonalKosten = 0
If Dir(ThisWorkbook.Path & "\" & Filename & ".xls") <> "" Then
Workbooks.Open ThisWorkbook.Path & "\" & Filename & ".xls", 0
Workbooks.Application.Visible = True
ActiveWindow.Visible = True
'Spaltenanzahl = Workbooks("Stundenerfassung").Sheets(toSearchDatum).Cells(2, Columns.Count).End(xlToLeft).Column
Spaltenanzahl = 100
Debug.Print ":o"
Debug.Print "toSearchDatum = " & toSearchDatum & " - toSearchProject = " & toSearchProject & " - Spaltenanzahl = " & Spaltenanzahl
i = 1
i2 = 0
'MsgBox toSearchProject
Do While i <= 100
i2 = i + 20
Debug.Print "Ich suche! i2 = " & i2 & " i = " & i
If Workbooks("Stundenerfassung").Sheets(toSearchDatum).Cells(2, i2).Value = toSearchProject Then '
SumZusatzPersonalKosten = Workbooks("Stundenerfassung").Sheets(toSearchDatum).Cells(3, i2).Value ' Workbooks("Stundenerfassung").
Debug.Print "GEFUNDEN in " & i2 & " SumZusatzPersonalKosten = " & SumZusatzPersonalKosten
Exit Do
End If
i = i + 1
Loop
Workbooks(currentWs).Close SaveChanges:=True 'true ?
Else
Debug.Print "File: " & ThisWorkbook.Path & "\" & Filename & ".xls nicht gefunden!"
End If
End Function
Wenn ich im Formular (in vba) den Button drücke ist die Direkbereich ausgabe:
Code:
:o
toSearchDatum = 01.01.2010 - toSearchProject = Projekt 1 - Spaltenanzahl = 100
Ich suche! i2 = 21 i = 1
Ich suche! i2 = 22 i = 2
Ich suche! i2 = 23 i = 3
Ich suche! i2 = 24 i = 4
GEFUNDEN in 24 SumZusatzPersonalKosten = 12
Wenn ich im Excel Sheet die Zelle C6 reingehe und Enter drücke bzw. strg+alt+f9 drücke damit die Sachen nochmal durchläuft sehe ich im Direktbereich folgendes:
Code:
:o
toSearchDatum = 01.01.2010 - toSearchProject = Projekt 01 - Spaltenanzahl = 100
Ich suche! i2 = 21 i = 1
Wenn ich folgenden Codeteil auskommentiere:
Code:
If Workbooks("Stundenerfassung").Sheets(toSearchDatum).Cells(2, i2).Value = toSearchProject Then '
SumZusatzPersonalKosten = Workbooks("Stundenerfassung").Sheets(toSearchDatum).Cells(3, i2).Value ' Workbooks("Stundenerfassung").
Debug.Print "GEFUNDEN in " & i2 & " SumZusatzPersonalKosten = " & SumZusatzPersonalKosten
Exit Do
End If
wird die Schleife problemlos ausgeführt, jedoch brauche ich ja eigentlich einen Wert aus der Stundenerfassung.xls
Fehlereingrenzung:
Meine Annahme ist,dass ich falsch auf die Objekte versuche für die Stundenerfassung.xls zuzugreifen und er deswegen irgendwie abbricht, jedoch das nicht sehe in excel. Wenn man das von vba aus ausführt, stimmen aber jedoch die Objekte bzw. sind richtig angesprochen.
In Stundenerfassung gibt es natürlich ein Sheet mit namen "01.01.2010" und auch eine Spalte in der "Projekt 01" drin steht.
Ich hoffe ich konnte verständlich mein Problem schildern, über eine nette konstruktive Hilfe wäre ich sehr dankbar.

AW: VBA Excel Funktion geschrieben gibt Return #Wert
Ramses

Hallo
Die Funktion schreibt Werte in verschiedene Zellen, und gibt selbst keinen Wert zurück.
Das heisst, du kannst nicht einfach in "=SumZusatzPersonalKosten("01.01.2010";"Projekt 1") " in eine Zelle schreiben um den WErt zu erhalten. EXCEL versucht in der Zelle aus der Funktion einen Wert zu erhalten. Nach dem die Funktion keinen Wert zurückgibt, steht auch "#WERT" in der Zelle
Diese Funktion wurde zur Verwendung mit Commandbuttons geschrieben, und nicht zur Verwendung in einer Zelle
Gruss Rainer