Thema Datum  Von Nutzer Rating
Antwort
Rot VBA Function ByRef Zirkelbezug
12.04.2020 00:06:04 Alessandra
NotSolved
12.04.2020 01:12:02 Gast42123
NotSolved

Ansicht des Beitrags:
Von:
Alessandra
Datum:
12.04.2020 00:06:04
Views:
732
Rating: Antwort:
  Ja
Thema:
VBA Function ByRef Zirkelbezug

Huhu,

ich habe ein Problem mit meiner Funktion und hoffe ihr könnt mir helfen.

Und zwar bin ich dabei eine Urlaubsfunktion zu schreiben. Als default return möchte ich gerne true oder false (also ist Urlaub) zurückbekommen. Gleichzeitig möchte ich das Feld mit dem vergleichsdatum (B5) überschreiben. Die Sub als test funkt. Sobald ich es aber in einer Tabelle einfüge bekomme ich den Fehler eines Zirkelbezugs.

Tabelle:

   |       A      |         B         |          C        |
1 |                     Urlaub                          |
2 | Urlaub 1 | 01.08.2020 | 07.08.2020 |
3 | Urlaub 2 | 10.10.2020 | 17.10.2020 |
4 |                |                    |                    |
5 |                | 06.08.2020 |                    |   

 

Schreibe ich nun in Zelle C5  "=Urlaub(A2:C3; B5)" wünsche ich mir als ausgabe in C5 = true und in B5 = Urlaub 1

Anbei noch der Code hoffe ihr könnt mir helfen

 

Function Urlaub(urlaubsRange As Range, ByRef vergleichsDatumRange As Range) As String

    Dim urlaubsName As String
    Dim startDatum As Date
    Dim endDatum As Date
    
    
    For i = 1 To urlaubsRange.Rows.Count
    
        If Not IsEmpty(urlaubsRange.Cells(i, 2).Value) Then
        
            urlaubsName = urlaubsRange.Cells(i, 1).Value
            startDatum = CDate(urlaubsRange.Cells(i, 2).Value)
            endDatum = CDate(urlaubsRange.Cells(i, 3).Value)
            vergleichsDatum = CDate(vergleichsDatumRange.Cells(1, 1).Value)
        
            Debug.Print startDatum & ", " & vergleichsDatum & ", " & endDatum
            
            isUrlaub = startDatum <= vergleichsDatum And vergleichsDatum <= endDatum
            
            If isUrlaub Then
                vergleichsDatumRange.Cells(1, 1).Value = urlaubsName
                Exit For
            End If
            
        End If
        
    Next

    Urlaub = isUrlaub
        
End Function


Private Sub test()
    Dim cellRange As Range
    Set cellRange = Range("A1:C3")
    
    Range(cellRange.Cells(1, 1), cellRange.Cells(1, 3)).MergeCells = True
    cellRange.Cells(1, 1).Value = "Urlaub"
    
    cellRange.Cells(2, 1).Value = "Urlaub 1"
    cellRange.Cells(2, 2).NumberFormat = "dd.mm.yyyy"
    cellRange.Cells(2, 2).Value = Format("01.08.2020", "dd.mm.yyyy")
    cellRange.Cells(2, 3).NumberFormat = "dd.mm.yyyy"
    cellRange.Cells(2, 3).Value = Format("07.08.2020", "dd.mm.yyyy")
    
    cellRange.Cells(3, 1).Value = "Urlaub 2"
    cellRange.Cells(3, 2).NumberFormat = "dd.mm.yyyy"
    cellRange.Cells(3, 2).Value = Format("10.10.2020", "dd.mm.yyyy")
    cellRange.Cells(3, 3).NumberFormat = "dd.mm.yyyy"
    cellRange.Cells(3, 3).Value = Format("17.10.2020", "dd.mm.yyyy")
    
    Dim vergleich As Range
    Set vergleich = Range("B5")
    vergleich.Cells(1, 1).NumberFormat = "dd.mm.yyyy"
    vergleich.Cells(1, 1).Value = Format("06.08.2020", "dd.mm.yyyy")
    
    Debug.Print Urlaub(cellRange, vergleich) & ", " & vergleich
    
End Sub

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:

 
 

  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot VBA Function ByRef Zirkelbezug
12.04.2020 00:06:04 Alessandra
NotSolved
12.04.2020 01:12:02 Gast42123
NotSolved