Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1216to1220
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
Inhaltsverzeichnis

UDF in Zelle eintragen und durch Wert ersetzen od.

UDF in Zelle eintragen und durch Wert ersetzen od.
Peter
Guten Abend
Ich habe mir ein UDF geschrieben, das ausgehend von der aktuelle Tabelle und Zeile zu den vorigen Tabellen geht, bis in der Zelle, die aus der entsprechenden Zeile und der mit der Funktion übergebenen Spalte ermittelt wird, ein Wert gefunden wird. Sobald dies der Fall ist, wird der Tabellenname zurückgegeben, wo der Wert gefundne wurde.
Die UDF gibt "" zurück, wenn eine Spalte links von der aufrufenden Zelle nichts in der Zelle steht. Steht erstmals etwas in der Zelle (kein Eintrag in einer frühere Tabelle), wird "Neu" ausgegeben.
Das funktioniert grundsätzlich.
Nicht ganz klar ist mir, ob es nun "elegant" ist, diese UDFs in den Zellen einzutragen und dann in Werte umzuwandeln (letztendlich will ich als Ergebnis ein Wert in der Zelle).
Oder ist es sinnvoller, den Wert schon im VBA zu berechnen und nur diesen einzutragen?
Wenn ja, wie müsste ich das anpacken - mit Application.Caller würde das dann ja nicht laufen.
Danke für eine Antwort.
Gruss, Peter
https://www.herber.de/bbs/user/75333.xls

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

Betreff
Benutzer
Anzeige
AW: UDF in Zelle eintragen und durch Wert ersetzen od.
19.06.2011 12:06:27
Josef

Hallo Peter,
probier Mal diesen Code unter "DieseArbeitsmappe".
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim lngIndex As Long
  On Error GoTo ErrExit
  Application.EnableEvents = False
  With Target
    If .Count = 1 Then
      If .Column < 3 And .Row > 3 Then
        If Sh.Cells(.Row, 1) <> "" And Sh.Cells(.Row, 2) <> "" Then
          If Sh.Index < Me.Worksheets.Count Then
            For lngIndex = Sh.Index + 1 To Me.Worksheets.Count
              If Me.Sheets(lngIndex).Cells(.Row, 3) <> "" Then
                Sh.Cells(.Row, 3) = Me.Sheets(lngIndex).Name
                Exit For
              End If
            Next
            If Sh.Cells(.Row, 3) = "" Then Sh.Cells(.Row, 3) = "Neu"
          End If
        Else
          Sh.Cells(.Row, 3) = ""
        End If
      End If
    End If
  End With
  ErrExit:
  Application.EnableEvents = True
End Sub



« Gruß Sepp »

Anzeige
AW: UDF in Zelle eintragen und durch Wert ersetzen od.
19.06.2011 18:43:01
Peter
Hallo Sepp
Vielen Dank für diesen Code.
Bei
For lngIndex = Sh.Index + 1 To Me.Worksheets.Count
wird gesteuert, dass Tabellen mit höherem Index abgearbeitet werde - soweit ich das sehe. Dadurch wird der "letzte" Eintrag in Tabellen geholt, die rechts von der aktuellen Tabelle angeordnet sind.
Beispiel aus der Beispieltabelle:
Sheet "0404", Zeile 4, Eingabe B4: 118 Code bewirkt Eintrag "0407", der letzte Eintrag ist jedoch in "0401".
Vielleicht ist "letzter" Eintrag etwas missverständlich. Folgendes ist die Überlegung:
In Tabelle "0404" (entspricht dem Datum 4. April) erfolgt ein Eintrag. Die Frage lautet, wann gab es letztmals (aus der Perspektive vom 4. April) in dieser Position einen Eintrag? Dies war am 1. April (also "0401") der Fall. - Die Tabelle "0100" ist ein Übertrag aus dem früheren Jahr.
Wie muss ich die "For" - Schleife ändern, dass immer bei den früheren Tabellen geschaut wird, ob ein Eintrag vorhanden ist.
Gruss, Peter
Anzeige
AW: UDF in Zelle eintragen und durch Wert ersetzen od.
19.06.2011 18:51:25
Josef

Hallo Peter,
dann so.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim lngIndex As Long
  On Error GoTo ErrExit
  Application.EnableEvents = False
  With Target
    If .Count = 1 Then
      If .Column < 3 And .Row > 3 Then
        If Sh.Cells(.Row, 1) <> "" And Sh.Cells(.Row, 2) <> "" Then
          If Sh.Index > 1 Then
            For lngIndex = Sh.Index - 1 To 1 Step -1
              If Me.Sheets(lngIndex).Cells(.Row, 3) <> "" Then
                Sh.Cells(.Row, 3) = Me.Sheets(lngIndex).Name
                Exit For
              End If
            Next
            If Sh.Cells(.Row, 3) = "" Then Sh.Cells(.Row, 3) = "Neu"
          End If
        Else
          Sh.Cells(.Row, 3) = ""
        End If
      End If
    End If
  End With
  ErrExit:
  Application.EnableEvents = True
End Sub



« Gruß Sepp »

Anzeige
AW: PERFEKT! vielen Dank, owT
19.06.2011 20:37:37
Peter

336 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige