VBA_Steuerung von Dropdowns
#1
Hallo Zusammen,
kann mir vielleicht jemand bei dieser Problemstellung weiterhelfen?
Im Anhang findet Ihr eine Excel-Datei, wo das unten beschriebene Thema dargestellt ist.
Ist es möglich, dass wenn ich in der Dropdown Zelle D7 Text Deutsch oder Text Englisch 
auswähle, dass dann sich alle Datensätze der Dropdowns in Spalte D ändern?
Es gibt jeweils zwei Datensätze die nur ein Unterschied haben, 
einmal DE für Deutsch und einmal EN für Englisch. (Die Daten liegen in der Tabelle 3.)
Das heißt, dass sich z.B. im Dropdown D13 sich der Datensatz 1_Hilfe_EN.docx sich auf 1_Hilfe_DE.docx ändern soll, 
wenn ich in der Zelle D7 das Dropdown auf Text Deutsch stelle., Wenn ich in der Zelle D7 Text Englisch auswähle, soll der 
Datensatz 1_Hilfe_DE.docx sich auf 1_Hilfe_EN.docx ändern.
Es sollen nur die Datensätze in dem Dropdown geändert werden, wo ein Datensatz ausgewählt worden ist.

Kann mir da jemand helfen?

Gruß
Dietmar


Angehängte Dateien
.xlsx   Mappe1.xlsx (Größe: 10,77 KB / Downloads: 12)
Antworten Top
#2
(03.07.2025, 08:38)Dietmar Henning schrieb: Es sollen nur die Datensätze in dem Dropdown geändert werden, wo ein Datensatz ausgewählt worden ist.

Kann mir da jemand helfen?

Moin Dietmar,

Treacy kann Dir helfen.  Smile 

Schau Dir dieses Tutorial an.
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.

Ciao, Ralf

Antworten Top
#3
Schau mal:


Angehängte Dateien
.xlsx   __switch_val_snb.xlsx (Größe: 9,27 KB / Downloads: 4)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#4
Hallo Dietmar,

auch in O2013 braucht es für so was kein VBA. Schau mal nach in Google unter: excel abhängige dropdown indirekt
Einzig zu beachten ist, dass im Sprachauswahl Dropdown der Text ohne Leerzeichen sein muss (Bedingung Namensmanager).

Gruß Uwe
Antworten Top
#5
... hier in unserem Forum und auch im Beispielbereich findest Du einiges zum Thema abhängige Dropdown. Einfach mal die Suche nutzen ...

zum Bleistift:
Thread-Excel-Abhaengige-Dropdowns
Thread-Mehrfach-abhaengige-Dropdown
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
Hi

mach aus der Vorlagenliste für das DropDown eine Kreuztabelle.
in die erste Spalte kommen die deutschen Texte
in die zweite Spalte kommen englischen Texte
(das ganze in Tabelle3! Spalte und B ab Zeile 1)
die Überschriften wählst du entsprechend der Werte für die DropDown-Sprachauswahl ("Text in Deutsch", "Text in Enlisch")

im DropDown mit der Werteauswahl hinterlegst du dann folgende Formel:

=Index(Tabelle3!$A$1:$B$9;0;Vergleich(Tabelle1!$D$7;Tabelle3!$A$1:$B$1;0))

dann passt sich das DropDown entsprechend deiner Sprachauswahl an.
Bereits ausgewählte Werte ändern sich hier nicht, das wird komplizierter.

Gruß Daniel
Antworten Top
#7
Hallo Zusammen,

ich konnte zusammen mit einen Kollegen eine Lösung zu diesem Problem finden:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Dim cell As Range
    Dim langSuffix1 As String, langSuffix2 As String
    Dim oldSuffix1 As String, oldSuffix2 As String
    Dim newValue As String

    ' Prüfen, ob D7 geändert wurde
    If Not Intersect(Target, Range("D7")) Is Nothing Then
        Application.EnableEvents = False
       
        ' Sprache bestimmen
        If Range("D7").Value = "Texte Deutsch" Then
            oldSuffix1 = "_EN"
            oldSuffix2 = "-EN"
            langSuffix1 = "_DE"
            langSuffix2 = "-DE"
        ElseIf Range("D7").Value = "Texte Englisch" Then
            oldSuffix1 = "_DE"
            oldSuffix2 = "-DE"
            langSuffix1 = "_EN"
            langSuffix2 = "-EN"
        Else
            GoTo Ende
        End If

        ' Bereich D13 bis D10000 prüfen (anpassbar)
        Set rng = Range("D13:D10000")
        For Each cell In rng
            If cell.Value <> "" Then
                newValue = cell.Value
                If InStr(newValue, oldSuffix1) > 0 Then
                    newValue = Replace(newValue, oldSuffix1, langSuffix1)
                End If
                If InStr(newValue, oldSuffix2) > 0 Then
                    newValue = Replace(newValue, oldSuffix2, langSuffix2)
                End If
                cell.Value = newValue
            End If
        Next cell

Ende:
        Application.EnableEvents = True
    End If
End Sub

Danke das Ihr euch Zeit für das Thema genommen habt.

Gruß Dietmar
Antworten Top
#8
Hi,

schön, dass du deine Lösung präsentierst. Ein großes Lob dafür!

Allerdings hat die Lösung noch einige Schwächen. Durch die Schleife ist es recht langsam und falls irgendwas schief läuft, bleibst du mit einem toten Excel zurück, da du nicht dafür gesorgt hast, dass auch dann die Events auf alle Fälle wieder eingeschaltet werden.

An deiner Stelle würde ich statt eine Schleife das eingebaute Suchen&Ersetzen in einem Bereich verwenden. Und dann noch (ausnahmsweise) die Fehler unterdrücken. Damit sieht das Ganze dann so aus:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
' Prüfen, ob D7 geändert wurde
If Not Intersect(Target, Range("D7")) Is Nothing Then
    Set rng = Range("D:D")
    Application.EnableEvents = False
    On Error Resume Next
    ' Sprache bestimmen
    If Range("D7").Value = "Texte Deutsch" Then
        rng.Replace What:="_EN", Replacement:="_DE", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
        rng.Replace What:="-EN", Replacement:="-DE"
    ElseIf Range("D7").Value = "Texte Englisch" Then
        rng.Replace What:="_DE", Replacement:="_EN", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
        rng.Replace What:="-DE", Replacement:="-EN"
    End If
    On Error GoTo 0
    Application.EnableEvents = True
End If
Beachte, dass ich jeweils beim ersten Replace alle Parameter angegeben habe. Beim Zweiten ist das dann nicht mehr notwendig. Auch habe ich die ganze Spalte verwendet, denn das hat hier keine Geschwindigkeitseinbußen zur Folge. Ja man könnte sogar auf das Abschalten der Events verzichten, zumindest so lange in D7 kein -DE, _DE, -EN oder _EN vorkommt. In dieser Variante ist es übrigens egal ob "DE" bzw. "EN" groß oder klein geschrieben sind. Solltest du wirklich nur großgeschriebenes ersetzen wollen, so musst du statt MatchCase:=False einfach nur MatchCase:=True setzen (Achtung kommt 2x vor!).

Zum Schluss noch ein Wort an alle, die nach einer Frage nie wieder etwas von sich hören lassen: Wie ihr seht, kann man auch nach dem Finden einer Lösung noch einige Verbesserungen erhalten - wenn man die gefundene Lösung mit dem Forum teilt.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
[-] Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:
  • schauan
Antworten Top


Gehe zu:


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