Clever-Excel-Forum

Normale Version: Makro einsetzten einer Formel
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich stehe auf dem Schlauch...

Das ist mein Makro (was auch eigentlich funktioniert und macht was es soll):

Code:
Sub UpdateFilterFormula()
    Dim wsBestellliste As Worksheet
    Dim wsLaserteile As Worksheet
    Dim selectedKW As String
    Dim kwRange As Range
    Dim kwCell As Range
    Dim kwColumn As String
    Dim filterFormula As String
    Dim targetCell As Range
   
    ' Definieren der Arbeitsblätter
    Set wsBestellliste = ThisWorkbook.Sheets("Bestellliste")
    Set wsLaserteile = ThisWorkbook.Sheets("Laserteile")
   
    ' Ermitteln der ausgewählten KW aus dem Dropdown-Feld
    selectedKW = wsBestellliste.Range("AC2").Value
   
    ' Überprüfen, ob die ausgewählte KW gültig ist
    If Not (selectedKW Like "KW*") Then
        MsgBox "Bitte wählen Sie eine gültige KW aus."
        Exit Sub
    End If
   
    ' Definieren des Bereichs, der die KWs in Laserteile enthält (BV1 bis DV1)
    Set kwRange = wsLaserteile.Range("BV1:DV1")
   
    ' Durchsuchen des Bereichs, um die entsprechende KW-Spalte zu finden
    For Each kwCell In kwRange
        If kwCell.Value = selectedKW Then
            kwColumn = Split(kwCell.Address, "$")(1)
            Exit For
        End If
    Next kwCell
   
    ' Überprüfen, ob die ausgewählte KW gefunden wurde
    If kwColumn = "" Then
        MsgBox "Die ausgewählte KW wurde nicht gefunden."
        Exit Sub
    End If
   
    ' Erstellen der neuen Filterformel basierend auf der ausgewählten KW-Spalte
    filterFormula = "=FILTER(Laserteile!C:C, Laserteile!" & kwColumn & ":" & kwColumn & "=""Aktiviert"")"
   
    ' Entfernen des @-Symbols aus der Formel
    filterFormula = Replace(filterFormula, "@", "")
   
    ' Definieren der Zielzelle (C5 auf dem Blatt "Bestellliste")
    Set targetCell = wsBestellliste.Range("C5")
   
    ' Deaktivieren von AutoAnwendung für die Zielzelle
    targetCell.Parent.EnableAutoFilter = False
   
    ' Setzen der Formel in die Zielzelle
    targetCell.Value = filterFormula
   
    ' Aktivieren von AutoAnwendung für die Zielzelle
    targetCell.Parent.EnableAutoFilter = True
End Sub

Das Ergebnis des Makros ist:
=@FILTER(Laserteile!C:C; Laserteile!BV:BV="Aktiviert")

Wo kommt das @Zeichen her? Warum ist es da?
Das macht leider meine Formel "kaputt". Denn mit dem @ Zeichen wird nur ein Ergebnis gefunden. Ohne @ Zeichen 4 (was auch korrekt ist).

Ich hab schon alles probiert, um im Makro das @ Zeichen zu entfernen. Nichts funktioniert.

Habt ihr eine Idee?
Hi,

seit einigen Excel-Versionen ist das @-Zeichen für dynamische Arrays, wenn ich da nicht ganz falsch liege.

Schau mal hier, ob dir der Inhalt aus einem anderen Forum weiterhilft:

https://www.herber.de/forum/archiv/1816t...ichen.html

oder ggfs. hier:

https://superuser.com/questions/1778496/...el-formula

Schönen Gruß

Mav
Super, Danke.

Formula2 war die Lösung.

Für alle die es interessiert hier das aktualisierte Makro:

Code:
Sub UpdateFilterFormula()
    Dim wsBestellliste As Worksheet
    Dim wsLaserteile As Worksheet
    Dim selectedKW As String
    Dim kwRange As Range
    Dim kwCell As Range
    Dim kwColumn As String
    Dim filterFormula As String
    Dim targetCell As Range
   
    ' Definieren der Arbeitsblätter
    Set wsBestellliste = ThisWorkbook.Sheets("Bestellliste")
    Set wsLaserteile = ThisWorkbook.Sheets("Laserteile")
   
    ' Ermitteln der ausgewählten KW aus dem Dropdown-Feld
    selectedKW = wsBestellliste.Range("AC2").Value
   
    ' Überprüfen, ob die ausgewählte KW gültig ist
    If Not (selectedKW Like "KW*") Then
        MsgBox "Bitte wählen Sie eine gültige KW aus."
        Exit Sub
    End If
   
    ' Definieren des Bereichs, der die KWs in Laserteile enthält (BV1 bis DV1)
    Set kwRange = wsLaserteile.Range("BV1:DV1")
   
    ' Durchsuchen des Bereichs, um die entsprechende KW-Spalte zu finden
    For Each kwCell In kwRange
        If kwCell.Value = selectedKW Then
            kwColumn = Split(kwCell.Address, "$")(1)
            Exit For
        End If
    Next kwCell
   
    ' Überprüfen, ob die ausgewählte KW gefunden wurde
    If kwColumn = "" Then
        MsgBox "Die ausgewählte KW wurde nicht gefunden."
        Exit Sub
    End If
   
    ' Erstellen der neuen Filterformel basierend auf der ausgewählten KW-Spalte
    wsBestellliste.Range("C5").Formula2 = "=FILTER(Laserteile!C:C, Laserteile!" & kwColumn & ":" & kwColumn & "=""Aktiviert"")"

End Sub

26865

(23.02.2024, 11:01)Maverick1909 schrieb: [ -> ]@-Zeichen für dynamische Arrays
Das Zeichen heißt in diesem Kontext "impliziter Schnittmengenoperator", steht also im Zusammenhang mit dynamischen Arrays.

https://support.microsoft.com/de-de/offi...c999be2b34
Gut zu wissen. Danke für den Link.

Allerdings wird dort nichts über VBA erzählt. Das man für sowas formula2 verwenden soll, ist schon irgendwie wichtig...