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.
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.
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).
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:
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.
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:1 Nutzer sagt Danke an HKindler für diesen Beitrag 28 • schauan