Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
620to624
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
620to624
620to624
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Seltsames Verhalten bei benutzerdefierter Funktion

Seltsames Verhalten bei benutzerdefierter Funktion
08.06.2005 23:19:25
Philip
Moin,
Ich habe folgende beutzerdefinierte Funktion für einen Dienstplan erarbeitet erarbeitet, die den Dienstbeginn automatisch errechnen soll:
Option Explicit


Function Beginn(Zeile As Range) As Single
'   Variablen definieren
Dim i As Byte
'   Spalten in denen Schichten eingetragen sein können
For i = 1 To 48
Select Case UCase(Cells(Zeile.Row, i + 2).Value)
Case "1", "GA", "GS", "GZ", "GD", "BR", "PH", "PL", "PP", "HM"
Exit For
End Select
Next i
'   kein Eintrag
If i = 49 Then
i = 0
'   06:00 - 24:00
Else
If i < 38 Then
i = (i + 11)
'   00:30 - 05:30
Else
i = (i - 37)
End If
End If
Beginn = i / 2
End Function

Das funktioniert auch wie gewünscht nur leider stelle ich ein seltsames Verhalten bei Excel fest, auf das ich mir keinen Reim machen kann:
Ich habe mehrere Worksheets in denen ich diese Funktion benutze.
Wenn ich nun mehr als ein Worksheet als Gruppe selektiere und dann irgendwo auf dem Blatt Zeilen lösche, oder einen Bereich verschiebe dann zeigt er auf allen Worksheets nur noch die Werte des ursprünglich aktiven Worksheets an.
Ist schwer zu erklären, am besten mal ausprobieren:
1. Selektiere die Blätter "Mo" und "Di". "Mo" als aktives Blatt.
2. Lösche irgendeine Zeile (z.B Zeile 10)
3. Sieh dir jetzt das Blatt "Di" an. Die Werte in B2, B3 und B5 sind nicht mehr jene, die sie ursprünglich waren, bzw. jene die durch die Funktion errechnet wurden. Es stehen jetzt die Werte drin, die an der gleichen Stelle auf dem Blatt "Mo" stehen.
Ist das ein Bug, oder übersehe ich etwas?
Hier der Link zur Datei:
https://www.herber.de/bbs/user/23753.xls
Gruß,
Philip

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

Betreff
Datum
Anwender
Anzeige
AW: Seltsames Verhalten bei benutzerdefierter Funk
09.06.2005 00:09:18
Matthias
Hallo Philip,
kein Wunder.
Die einzige Information, die die Funktion auswertet, ist die Zeile des Bereiches:
UCase(Cells(Zeile.Row, i + 2).Value)
dann gibt Cells(Zeile.Row, i+2) den Zellwert des aktiven Blattes(!) zurück.
Mein Vorschlag:
Function Beginn(Bereich As Range)
Dim z As Range, inhalt As String, temp As Double
temp = 0                                                                'Falls Bereich leer ist
For Each z In Bereich                                                   'jede Zelle des Bereichs durchgehen
inhalt = UCase(z.Value)
Select Case inhalt
Case "1", "GA", "GS", "GZ", "GD", "BR", "PH", "PL", "PP", "HM"  'wenn einer dieser Werte, dann
temp = z.Offset(-z.Row + 1, 0).Value                            'temp aus Tabelle Zeile 1 lesen,
Beginn = temp                                                   'Rückgabewert setzen
Exit Function                                                   'und fertig!
End Select
Next
Beginn = temp   'Wenn leer, dann Rückgabewert 0
End Function

Gruß Matthias
Anzeige
AW: Seltsames Verhalten bei benutzerdefierter Funk
09.06.2005 07:12:58
Philip
Hallo Matthias,
vielen Dank, das hat mir sehr geholfen. *lichtangeh*
Vielleicht dazu noch eine zweite Frage:
Analog dazu habe ich in meiner echten Datei noch eine Funktion die das Schichtende ausgibt.
Das hatte ich ursprünglich so gelöst: For i = 48 To 1 Step - 1
Hat jemand dazu vielleicht noch ne Idee?
Gruß,
Philip
AW: Seltsames Verhalten bei benutzerdefierter Funk
09.06.2005 07:42:29
Matthias
Hallo Philip,
bittesehr:

Function Ende(Bereich As Range)
Dim z As Range, inhalt As String, temp As Double
Dim i As Integer
temp = 0
For i = Bereich.Count To 1 Step -1
Set z = Bereich(i)
inhalt = UCase(z.Value)
Select Case inhalt
Case "1", "GA", "GS", "GZ", "GD", "BR", "PH", "PL", "PP", "HM"
temp = z.Offset(-z.Row + 1, 0).Value
Ende = temp
Exit Function
End Select
Next i
Ende = temp
End Function
Gruß Matthias
Anzeige
Vielen Dank, Matthias. (o.T.)
09.06.2005 16:45:48
Philip
.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige