Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Makro einsetzten einer Formel
#1
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?
Antworten Top
#2
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
[-] Folgende(r) 1 Nutzer sagt Danke an Maverick1909 für diesen Beitrag:
  • DeLaGhetto
Antworten Top
#3
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
Antworten Top
#4
(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
Hat Dir mein Beitrag geholfen? Dann hilf auch Du - mit einer Spende an Wikipediadie Tafeln oder aktion-deutschland-hilft.de
Antworten Top
#5
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...
Antworten Top
#6
Moin, 19 

siehe...

Range.Formula2-Eigenschaft (Excel)...

Formel im Vergleich zu Formel2...
________
Servus
Case
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste