Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
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

Formel in Makro einbinden

Formel in Makro einbinden
17.05.2023 10:50:59
chris58

Hallo !
Ich bräuchte nochmal Eure Hilfe. Ich habe die Formel =TEXT(C7-1;"TTTT") in der Zelle D7 stehen. Diese schreibt mir den Vortag in Spalte J wenn eine neue Zeile gespeichert wird.
Nun dachte ich, das, wenn andere die Datei benutzen und diese Formel "irrtümlich" löchen, wäre es gut, wenn diese Formel gleich im Makro enthalten wäre. wie kann ich es anstellen, das dies ermöglich wrid. Ich habe es mit dem Makrorecorder versucht, jedoch wird das nichts.

Hier die Formel die mir der Makrorecorder auswirft. Diese habe ich in das Makro eingebaut, die o.a. Formel gelöscht, doch es kommt immer der gleiche Tag, egal welches Datum ich eingabe. Da Datum wird in Spalte A eingetragen.
' Formel in Spalte J
TB.Cells(sMaxZeile, 10).FormulaR1C1 = "=R[-8]C[-6]"

Danke für Eure Hilfe
chris

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel in Makro einbinden
17.05.2023 12:11:02
Daniel
hi
da hast du aber nicht die Eingabe der Formel aufgezeichnet, denn da fehlt ja das TEXT.
also zeichne nochmal auf und gib dabei die vollständige Formel ein.
ein tipp noch, wenn du Formeln für die Verwendung in VBA aufzeichnest:
Setzte alle Zellbezüge, die nicht zwingend relativ sein müssen auf absolut und lass nur die relativ, die es sein müssen.

Gruß Daniel


Funktion per VBA in Tabellenblatt eintragen
17.05.2023 12:21:46
NoNet
Hallo Chris,

ich habe zwar den Zusammenhang zwischen Deiner Erklärung im oberen Teil und der Funktion im unteren Teil nicht ganz verstanden (Weshalb Funktion in Spalte 10 - also J ?), aber ich versuche dennoch, Dir eine Lösungsmöglichkeit zu präsentieren :

Das folgende Makro muss in das Klassenmodul des Tabellenblattes (also: im VB-Editor den NAmen des Blattes anklicken und auf der rechten Seite den Code hinein pasten. Der Code funktioniert NICHT in einem Standard-Modul !) :
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim TB As Worksheet, sMaxZeile As Long
    Set TB = ActiveSheet 'oder ein anderes Tabellenblatt : Set TB = Worksheets("Tabelle1")
    
    sMaxZeile = TB.Cells(Rows.Count, 3).End(xlUp).Row 'Letzte Zeile - in Abhängigkeit der Werte in Spalte C
    
    If sMaxZeile > 8 Then
        Application.EnableEvents = False 'Reaktion auf Zelländerung abschalten
        TB.Range([D5], Cells(sMaxZeile, 4)).FormulaR1C1 = "=Text(RC[-1],""TTTT"")" 'Weshalb "=R[-8]C[-6]" ?
        Application.EnableEvents = True 'Reaktion auf Zelländerung einschalten
    End If
End Sub
Der Code reagiert auf Eingaben/Änderungen/Löschungen im betreffenden Tabellenblatt und schreibt in Spalte D automatisch die Funktion =Text(C[Zeile];"TTTT") hinein, wobei [Zeile] durch die jeweilige Zeilennummer ersetzt wird. Diese Funktionen werden in Spalte D nur im Bereich ab Zeile 3 bis zur letzten befüllten Zeile der Spalte C geschrieben. Steht also der letzte Eintrag der Spalte C in C20, so wird diese Funktion im Bereich D3:D20 eingetragen.

Ich hoffe, das passt in etwa, ansonsten : Melde Dich nochmal.

Salut, NoNet


Anzeige
AW: Funktion per VBA in Tabellenblatt eintragen
17.05.2023 13:38:33
chris58
Hallo !
Danke das Ihr Euch das angesehen habt, doch ich habe nun herumprobiert und es geht nicht so wie ich es mir vorstelle. Ich habe nun den gesamten Code hier reingestellt, die ganz Datei geht nicht. Ich will eigentlich nur, das in der Spalte J dort der Tag zum Datum aus A eingetragen wird.
Falls wer eine Idee hat......danke
chris

Sub ProtokollSichern()
        Dim i As Long
        Const NewConstSheet As String = "Berechnung"
        Dim bfound As Boolean
        Dim sMerk As String
        Dim sMaxZeile As Long
        Dim TB As Worksheet
        
        Application.ScreenUpdating = False
        
        'Prüfen ob Tabelle NewConstSheet schon angelegt ist
        For i = 1 To ActiveWorkbook.Sheets.Count
            If ActiveWorkbook.Sheets(i).Name = NewConstSheet Then
                bfound = True
                Exit For
            End If
        Next i
        
        'wenn nicht dann anlegen
        If bfound = False Then
            sMerk = ActiveWorkbook.ActiveSheet.Name
            ActiveWorkbook.Sheets.Add after:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
            ActiveWorkbook.ActiveSheet.Name = NewConstSheet
            ActiveWorkbook.Sheets(sMerk).Activate
        End If
        
        Set TB = ActiveWorkbook.Sheets(NewConstSheet)
        
        'nächste leere Zeile ermitteln
        sMaxZeile = TB.Cells(TB.Rows.Count, 1).End(xlUp).Row + 1
        
        'Daten in neue Tabelle übertragen
        TB.Cells(sMaxZeile, 1) = ActiveWorkbook.ActiveSheet.Range("C7")
        TB.Cells(sMaxZeile, 2) = ActiveWorkbook.ActiveSheet.Range("B7")
        TB.Cells(sMaxZeile, 3) = ActiveWorkbook.ActiveSheet.Range("C6")
        TB.Cells(sMaxZeile, 4) = ActiveWorkbook.ActiveSheet.Range("C12")
        TB.Cells(sMaxZeile, 5) = ActiveWorkbook.ActiveSheet.Range("C13")
        TB.Cells(sMaxZeile, 6) = ActiveWorkbook.ActiveSheet.Range("C14")
        TB.Cells(sMaxZeile, 7) = ActiveWorkbook.ActiveSheet.Range("C15")
        TB.Cells(sMaxZeile, 10) = ActiveWorkbook.ActiveSheet.Range("D7")
        
           
        
       '   Formel in Spalte G
        TB.Cells(sMaxZeile, 8).FormulaR1C1 = "=(RC3-R[-1]C3)/(RC1-R[-1]C1)" '=($C64-$C63)/($A64-$A63)
       
        '   Formel in Spalte I
        TB.Cells(sMaxZeile, 9).FormulaR1C1 = "=(RC[-1])/24"
        
        '   Formel in Spalte J
        ' TB.Cells(sMaxZeile, 10).FormulaR1C1 = "=R[-8]C[-6]"
        
     
        Application.ScreenUpdating = True
    End Sub


Anzeige
AW: Funktion per VBA in Tabellenblatt eintragen
17.05.2023 13:54:00
chris58
Hallo !
Danke nochmals, ich habe das nun selbst geschafft. Danke jedenfalls, das Ihr mir auf die Sprünge geholfen habt. Ich habe das so eingefügt:

' Formel in Spalte G
TB.Cells(sMaxZeile, 8).FormulaR1C1 = "=(RC3-R[-1]C3)/(RC1-R[-1]C1)" '=($C64-$C63)/($A64-$A63)

' Formel in Spalte I
TB.Cells(sMaxZeile, 9).FormulaR1C1 = "=(RC[-1])/24"

' Formel in Spalte J
TB.Cells(sMaxZeile, 10).FormulaR1C1 = "=TEXT(R[-2390]C[-7]-1,""TTTT"")"

lg chris


=TEXT(R[-2390]C[-7]-1,""TTTT"") ??
17.05.2023 14:48:57
NoNet
Hallo Chris,

schön, dass es nun offenbar passt.
Aber : Ist =TEXT(R[-2390]C[-7]-1,""TTTT"") wirklich korrekt ?
D.h. Du erstellst immer einen Wochentag aus einem Datum, das 2390 Zeilen oberhalb der Zielzelle steht ??

Salut, NoNet


Anzeige
AW: Erst ab Zeile 9 möglich
17.05.2023 14:08:35
NoNet
Hallo Chris,

grundsätzlich funktioniert Dein Code.
Aber die auskommentierte Funktion ""=R[-8]C[-6]" ist natürlich erst ab Zeile 9 im Zielblatt möglich, da Du ja auf die Zelle 8 Zeilen weiter oben verweist (R[-8]) !

Salut, NoNet


AW: Erst ab Zeile 9 möglich
17.05.2023 20:22:22
chris58
Hallo NoNet !
Tja, wie ich nun sehe, es klappt eh nicht. Auch nicht mit deinem Makro. Da kommen die Tage, aber von D - wenn ich es irgendwo ändere bis zu J.
Ich brauch es nur in der Spalte J, ab J21. Ich dachte halt, es geht mit einer Formel, die ich, so wie die anderen einbaue und dann haut das hin. Ich bin halt kein Profi und anscheinend nicht mal ein User für Excel.
Danke jedenfalls
chris58


Anzeige
AW: Erst ab Zeile 9 möglich
18.05.2023 17:58:40
chris58
Hallo !
Gelöst...
hier die Formel
' Formel in Spalte J
TB.Cells(sMaxZeile, 10).FormulaR1C1 = "=TEXT(RC[-9]-1,""TTTT"")"

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige