UDF geht nicht über mehrere Blätter



Excel-Version: 2000
  

Mit Gedult gelöst

von: Martin Glarner
Geschrieben am: 16.04.2002 - 07:52:36


Habe es nach langer Zeit selber lösen können
Gruss Martin

nach unten

Betrifft: UDF geht nicht über mehrere Blätter
von: Martin Glarner
Geschrieben am: 14.04.2002 - 20:46:09

Hallo Zusammen
Ich habe meine erste Funktion (UDF) geschrieben, welche auch funktioniert, solange ich diese nur in einem Sheet
brauche.
Sobald die Funktion in mehreren Sheets zum
Einsatz kommt beeinflussen sich diese Funktionen
gegenseitig.
Die Funktion wird in allen Sheets neu berechnet und zwar
mit falschen Werten aus dem aktuellen Sheet.
Ich habe nirgends eine Erklärung gefunden, darum bin
ich Euch sehr Dankbar für Tips
Gruss Martin



Option Explicit
Function Operand()
'***************************************************************
' Formel für die Berechnung des nächsten Operanden
'
' Folgende drei Operandentypen sind möglich:
' M0.0, E0.0 oder A0.0
'
' Der fortlaufende Code ist folgendermassen Aufgebaut:
' M0.0
' M0.1
' M0.2
' M0.3
' M0.4
' M0.5
' M0.6
' M0.7
' M1.0
' M1.1
' usw....
'
' Der erste Operand muss von Hand z.B. in der Zelle A5 eingegeben
' werden. Anschliessend berechnet diese Funktion den fortlaufenden
' Code, der immer in der spalte A steht, automatisch.
'
' A5 > M0.0
' A6 > =Operand()
' A7 > =Operand()
' A8 > =Operand()
' usw.
'
' Da mehrere Leerzellen eingefügt werden können, sucht diese
' Funktion von unten nach oben den nächsten gültigen vorgänger
' Operanden (Max.20 Zeilen retour)
'
' 12.04.2002
'***************************************************************
Dim rng As Range
Dim As Integer
Dim vorg_Operand As String

    ' Kennzeichnet eine benutzerdefinierte Funktion als flüchtig
    Application.Volatile

    ' Der Range beim Aufruf des UDF wird ermittelt
    Set rng = Application.Caller
    
    ' Operand unbekannt falls kein vorgänger Operand gefunden wurde
    Operand = "?"
    
    ' Schleife um gültigen Operand zu suchen
    For i = rng.Row - 1 To rng.Row - 20 Step -1
        
        ' Nur bis Zeile 1 prüfen
        If i < 1 Then Exit For
        
        ' vorgänger Operand
        vorg_Operand = ActiveSheet.Cells(i, 1)
                
        ' Prüfen ob es sich um einen M,E,A Typ handelt
        If Left(vorg_Operand, 1) = "M" Or Left(vorg_Operand, 1) = "E" Or Left(vorg_Operand, 1) = "A" Then

            ' Prüfen ob das 2.letzte Zeichen ein . ist
            If Mid(vorg_Operand, Len(vorg_Operand) - 1, 1) = "." Then
    
                ' Der Buchstabe M,E,A wird in den neuen Operandentext geschrieben
                Operand = Left(vorg_Operand, 1)
        
                ' Prüfen ob die Vorlage Adresse x.7 hat
                If Right(vorg_Operand, 1) = "7" Then
                    Operand = Operand & (Mid(vorg_Operand, 2, Len(vorg_Operand) - 1) + 0.3) & ".0"
                Else
                    Operand = Operand & (Mid(vorg_Operand, 2, Len(vorg_Operand) - 1) + 0.1)
                End If
                
                ' Neuer Operand wurde definiert
                Exit For
        
            End If
        End If
    Next i
End Function



 nach oben

Beiträge aus den Excel-Beispielen zum Thema "UDF geht nicht über mehrere Blätter"