Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Excel Funktion geschrieben gibt Return #Wert

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 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.

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Excel Funktion geschrieben gibt Return #Wert
02.01.2010 16:59:33
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
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige