Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
448to452
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
448to452
448to452
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA: Excel 2000/2002 Konstruktion einer Function

VBA: Excel 2000/2002 Konstruktion einer Function
04.07.2004 18:02:00
LXus
Hi Leutz!
Folgendes Problem: Habe eine Function, unten gepostet, die mich zur Verzweiflung bringt. Sie Läuft nämlich nicht.
Kann mir wer sagen was daran falsch ist oder wie man Sie besser schreiben kann?
Ich kann im Grunde alle Variablen innerhalb der

Function angeben, wenn ich mit relativen Bezügen arbeite. Nur wie geht das?
Aber hier erst mal die besagte Function:

Function AZT(R1 As Range, R2 As Range, R3 As Range)
If WorksheetFunction.IsNumber(Beginn) = True And WorksheetFunction.IsNumber(Ende) = True Then
Dim Beginn, Ende, P, Ps, BgB, BgE As Date
Beginn = "RC[-4]"
Ende = "RC[-3]"
P = "RC[-2]"
Ps = "RC[-1]"
BgB = Worksheets("A").Range("BE15").Value
BgE = Worksheets("A").Range("BE16").Value
If Beginn < Ende Then
If P <= Ps Then
If Ende >= BgE And Beginn > BgB Then
AZT = BgE - Beginn - Ps
End If
If Ende < BgE And Beginn <= BgB Then
AZT = Ende - BgB - Ps
End If
If Ende < BgE And Beginn > BgB Then
AZT = Ende - Beginn - Ps
End If
If Ende >= BgE And Beginn <= BgB Then
AZT = BgE - BgB - Ps
End If
End If
If P > Ps Then
If Ende >= BgE And Beginn > BgB Then
AZT = BgE - Beginn - P
End If
If Ende < BgE And Beginn <= BgB Then
AZT = Ende - BgB - P
End If
If Ende < BgE And Beginn > BgB Then
AZT = Ende - Beginn - P
End If
If Ende >= BgE And Beginn <= BgB Then
AZT = BgE - BgB - P
End If
End If
End If
Dim Txt, Zm As String, Zeit As Date
Txt = "RC[-4]"
Zm = Worksheets("A").Range("BE19").Text
Zeit = "RC[-3]"
ElseIf WorksheetFunction.IsText(Txt) = True And _
Txt = "E" Or Txt = "F" Or Txt = "K" Or Txt = "RF" Or Txt = "S" Or Txt = "SE" Or Txt = "E/RF" Or Txt = "SE/E" Then
AZT = WorksheetFunction.VLookUp(Txt, R1, WorksheetFunction.VLookUp(Zm, R3, 3, False), False)
ElseIf WorksheetFunction.IsText(Txt) = True And _
Txt = "R" Or Txt = "GB" Or Txt = "SE/RF" Or Txt = "E/ZT" Then
If Zeit <= 0 Or Txt = "" Then Exit Function
If Txt = "R" Or Txt = "GB" Or Txt = "SE/RF" Or Txt = "E/ZT" Then
If Zeit <= 0 Or Txt = "" Then Exit Function
End If
If Zeit < WorksheetFunction.VLookUp(Txt, R2, WorksheetFunction.VLookUp(Zm, R3, 3, False), False) Then
AZT = Zeit
End If
If Zeit >= WorksheetFunction.VLookUp(Txt, R2, WorksheetFunction.VLookUp(Zm, R3, 3, False), False) Then
AZT = WorksheetFunction.VLookUp(Txt, R2, WorksheetFunction.VLookUp(Zm, R3, 3, False), False)
End If
End If
Else: Exit Function
End If
End Function

DANKE
LXus

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Excel 2000/2002 Konstruktion einer Functi
Reinhard
Hi LXus,
grundsätzlich:
Dim Beginn, Ende, P, Ps, BgB, BgE As Date
da ist nur BgE als Date bekanntgeben, die anderen sind variant.
Lösung:
Dim Beginn as Date, Ende as Date, usw
Code läuft nicht:
Es wird nur der Else-Zweig nach dem ersten If ausgeführt, da Beginn zu diesem Zeipunkt "leer" ist, also IsNumber(Beginn)=false.
Den rest habe ich nicht angeschaut, da nicht strukturiert, ornde das mal neu durch Einrückungen.
Gruß
Reinhard
AW: VBA: Excel 2000/2002 Konstruktion einer Functi
04.07.2004 19:02:05
LXus
Hi Reinhard!
Danke erstmal für die schnelle Auskunft, weis nicht genau was ich da neu ordnen soll!
Aber ich habe eine zweite Variante ausprobiert:

Function AZT(Dat As String, Beginn As Date, Ende As Date, P As Date, Ps As Date, BgB As Date, BgE As Date, _
Txt As String, Zeit As Date, R1 As Range, R2 As Range, R3 As Range, Zm As String)
If Dat = "" = True Then
AZT = ""
End If
If WorksheetFunction.IsNumber(Beginn) = True Then
Call AzZahl
End If
If WorksheetFunction.IsText(Txt) = True And _
Txt = "E" Or Txt = "F" Or Txt = "K" Or Txt = "RF" Or Txt = "S" Or Txt = "SE" Or Txt = "E/RF" Or Txt = "SE/E" Then
Call ATEXT
End If
ElseIf WorksheetFunction.IsText(Txt) = True And _
Txt = "R" Or Txt = "GB" Or Txt = "SE/RF" Or Txt = "E/ZT" Then
Call ATXT
End If
End Function


Function AzZahl(Beginn As Date, Ende As Date, P As Date, Ps As Date, BgB As Date, BgE As Date)
If Beginn = 0 Or Ende = 0 Then Exit Function
If Beginn < Ende Then
If P <= Ps Then
If Ende >= BgE And Beginn > BgB Then
AzZahl = BgE - Beginn - Ps
End If
If Ende < BgE And Beginn <= BgB Then
AzZahl = Ende - BgB - Ps
End If
If Ende < BgE And Beginn > BgB Then
AzZahl = Ende - Beginn - Ps
End If
If Ende >= BgE And Beginn <= BgB Then
AzZahl = BgE - BgB - Ps
End If
End If
If P > Ps Then
If Ende >= BgE And Beginn > BgB Then
AzZahl = BgE - Beginn - P
End If
If Ende < BgE And Beginn <= BgB Then
AzZahl = Ende - BgB - P
End If
If Ende < BgE And Beginn > BgB Then
AzZahl = Ende - Beginn - P
End If
If Ende >= BgE And Beginn <= BgB Then
AzZahl = BgE - BgB - P
End If
End If
End If
End Function


Function ATEXT(Txt As String, R1 As Range, R3 As Range, Zm As String)
If Txt = "E" Or Txt = "F" Or Txt = "K" Or Txt = "RF" Or Txt = "S" Or Txt = "SE" Or Txt = "E/RF" Or Txt = "SE/E" Then
ATEXT = WorksheetFunction.VLookUp(Txt, R1, WorksheetFunction.VLookUp(Zm, R3, 3, False), False)
Else: Exit Function
End If
End Function


Function ATXT(Txt As String, Zeit As Date, R2 As Range, R3 As Range, Zm As String)
If Zeit <= 0 Or Txt = "" Then Exit Function
If Txt = "R" Or Txt = "GB" Or Txt = "SE/RF" Or Txt = "E/ZT" Then
If Zeit <= 0 Or Txt = "" Then Exit Function
End If
If Zeit < WorksheetFunction.VLookUp(Txt, R2, WorksheetFunction.VLookUp(Zm, R3, 3, False), False) Then
ATXT = Zeit
If Zeit >= WorksheetFunction.VLookUp(Txt, R2, WorksheetFunction.VLookUp(Zm, R3, 3, False), False) Then
ATXT = WorksheetFunction.VLookUp(Txt, R2, WorksheetFunction.VLookUp(Zm, R3, 3, False), False)
End If
End Function

Ich habe die einzelnen Prozeduren stehen lassen und will sie aufrufen, was er aber auch nicht macht.
Haste hier vielleicht ne Idee?
Wenn ich die Funktion in Excel übernehme kommt ne Fehlermeldung: "Argument ist nicht optional" und er springt im Debugger auf Call AzZahl.
DANKE
LXus
Anzeige
AW: VBA: Excel 2000/2002 Konstruktion einer Functi
Ulf
Wenn du Call AzZahl aufrufst musst du auch die gesamten Parameter mitübergeben.
Ehrlich gesagt, weiß ich gar nicht, was du eigentlich erreichen willst.
Ulf
AW: VBA: Excel 2000/2002 Konstruktion einer Functi
04.07.2004 19:35:10
LXus
Hi!
Ich möchte ereichen das Zeiten ausgerechnet werden. Dazu gibt es drei Möglichkeiten:
1. Ich trage Anfangs- und Endzeit ein und optional die Pause
2. Ich trage einen bestimmten Text und die Zeitbestimmung erfolgt automatisch
3. Ich trage einen Text und eine Zeit ein, ist die Zeit innerhalb einer vorgegebenen Begrenzung wird die Zeit in die Anzeige übernommen - anderfalls die Begrenzung.
Die Funktionen alleine funktionieren ja, ich weis nur nicht wie sie zusammen fassen soll, denn ich möchte möglichst wenig Speicherplatz verbrauchen.
Und je mehr ich in VBA schreibe und die entsprechenden Einträge aus Excel entferne um kleiner wird meine Datei.
Bei ein oder zwei Dateien mag es egal sein, ob die Datei 1,5 MB oder 200 KB groß ist -
Bei 400 Dateien sieht das wieder anders aus.
DANKE
LXus
Anzeige

154 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige