Clever-Excel-Forum

Normale Version: VBA Such-Ersetz-Array
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Kann mir hier vielleicht jemand weiterhelfen? Es wird leider kein einziger Begriff ersetzt/übersetzt

Code:
'sucht im aktiven Tabellenblatt jeweils die Eintraege aus
'suchArray und ersetzt mit ersetzArray, Übersetzung der Begriffe English/Deutsch

Dim suchArray()
Dim ersetzArray()
Dim k As Long




If Language = Target And Target.Row = Language.Row Then 'Wenn Sprache geändert wird

Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

    If ActiveSheet.Range("AF4").Value = "English" Then
        'ActiveSheet.Range("C6").Value = "Please wait. Translation in progress."
       
        suchArray = Array("Untertischspülmaschine", "Durchschubspülmaschine", "Gerätespülmaschine", "Frühere Besteckspülmaschine", "Gläser", "Drehstrom", "Wechselstrom", "Geschirr", "mit Trockenzone", "Nachspülung kalt", "Nachspülung umschaltbar", "Nachspülung heiß", "PT Besteck", "UC Besteck", "Kurzprogramm", "DIN-Programm")
        ersetzArray = Array("Undercounter dishwasher", "Passthrough dishwasher", "Utensil washer", "Former cutlery washer", "Glasses", "three-phase current", "alternating current", "Dishes", "with drying zone", "cold rinse", "switchable rinse", "hot rinse", "PT Cutlery", "UC Cutlery", "Short programme", "Medium programme")
        For k = LBound(suchArray) To UBound(suchArray)
        Call ActiveSheet.Columns("F:AE").Replace(suchArray(k), _
        ersetzArray(k), _
        , _
        , _
        False)
       
        Next k
     
     ElseIf ActiveSheet.Range("AF4").Value = "Deutsch" Then
        'ActiveSheet.Range("C6").Value = "Bitte warten. Übersetzung läuft."
       
        suchArray = Array("Undercounter dishwasher", "Passthrough dishwasher", "Utensil washer", "Former cutlery washer", "Glasses", "three-phase current", "alternating current", "Dishes", "with drying zone", "cold rinse", "switchable rinse", "hot rinse", "PT Cutlery", "UC Cutlery", "Short programme", "Medium programme")
        ersetzArray = Array("Untertischspülmaschine", "Durchschubspülmaschine", "Gerätespülmaschine", "Frühere Besteckspülmaschine", "Gläser", "Drehstrom", "Wechselstrom", "Geschirr", "mit Trockenzone", "Nachspülung kalt", "Nachspülung umschaltbar", "Nachspülung heiß", "PT Besteck", "UC Besteck", "Kurzprogramm", "DIN-Programm")
        For k = LBound(suchArray) To UBound(suchArray)
        Call ActiveSheet.Columns("F:AE").Replace(suchArray(k), _
        ersetzArray(k), _
        , _
        , _
        False)
       
        Next k
       
    End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
'ActiveSheet.Range("C6").Value = ""
End If

Die Google-Suchfunktion hat leider nicht geholfen. Bin noch recht neu in diesem Gebiet!

Vielen Dank!
Hallo,

jetzt soll man nach deinem (unvollständigen) Makro die Datei nachbauen, um auf Fehlersuche gehen zu können?
Hi

Versuch es mal damit.
Code:
Public Sub Ersetz()
Dim ArrD, ArrE, j As Long

Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
On Error Resume Next
      
  ArrD = Array("Untertischspülmaschine", "Durchschubspülmaschine", "Gerätespülmaschine", "Frühere Besteckspülmaschine", "Gläser", "Drehstrom", "Wechselstrom", "Geschirr", "mit Trockenzone", "Nachspülung kalt", "Nachspülung umschaltbar", "Nachspülung heiß", "PT Besteck", "UC Besteck", "Kurzprogramm", "DIN-Programm")
  ArrE = Array("Undercounter dishwasher", "Passthrough dishwasher", "Utensil washer", "Former cutlery washer", "Glasses", "three-phase current", "alternating current", "Dishes", "with drying zone", "cold rinse", "switchable rinse", "hot rinse", "PT Cutlery", "UC Cutlery", "Short programme", "Medium programme")
       
  For j = 0 To UBound(ArrD, 1)
    If ActiveSheet.Range("AF4").Value = "English" Then
       Range("F:AE").Replace What:=ArrD(j), Replacement:=ArrE(j), LookAt:=xlWhole
    Else
       Range("F:AE").Replace What:=ArrE(j), Replacement:=ArrD(j), LookAt:=xlWhole
    End If
  Next j

Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
End Sub
Gruß Elex

evtl. brauchst du es mit der Einstellung.
LookAt:=xlPart
Nur ergänzend:
Ich würde die Übersetzungstabelle in ein (später ausgeblendetes) Blatt schreiben.
So etwas lässt sich erheblich leichter pflegen, wenn sich die Liste mal erweitert.
Außerdem erspart man sich das mühsame Tippen von siebenunddrölfzig Füßchen der Gänse nebst Kommata.

Wenn man die Mappe kennen würde, wäre vielleicht sogar eine reine Formellösung denkbar.

Gruß Ralf
Moinsen,

diese Anweisung:
Code:
Call ActiveSheet.Range("F:AE").Replace(suchArray(k), ersetzArray(k), ,  True)

wie folgt ändern:
Code:
Call ActiveSheet.Range("F:AE").Replace(suchArray(k), ersetzArray(k), , , True)

Du schreibst TRUE (also den Wert -1) in den Parameter SearchOrder.
Die SearchOrder-Aufzählung kennt die Konstanten xlByColumns und xlByRow - die Werte 2 und 1.
-1 gibt es nicht; das führt zum Laufzeitfehler #9; Index außerhalb ...
https://docs.microsoft.com/de-de/office/...ge.replace


Übrigens:
On Error Resume Next hilft Dir bei der Fehlersuche nicht.
Fehler zu bekommen ist gut - dann bekommt man gezeigt was anzupacken ist.
Danke Mase das hat funktioniert!
Vielen Dank auch an alle anderen Smile
Hi

Im Code in #1 finde ich zwar weder die Zeile
Code:
Call ActiveSheet.Range("F:AE").Replace(suchArray(k), ersetzArray(k), ,  True)
sondern nur diese.
Code:
Call ActiveSheet.Columns("F:AE").Replace(suchArray(k), ersetzArray(k), , , False)

Und von On Error Resume Next finde ich auch nichts.

Aber wenn es jetzt passt. :15:
Verrückte Welt und man lernt doch nie aus.


Gruß Elex
(20.07.2020, 10:43)Elex schrieb: [ -> ]Und von On Error Resume Next finde ich auch nichts.

Wenn ich meine Brille nicht selber brauchen würde, würde ich sie Dir virtuell rüberreichen …

:21: :19:
Alternative:

Code:
Sub M_snb()
  sd = Array("Untertischspülmaschine", "Durchschubspülmaschine", "Gerätespülmaschine", "Frühere Besteckspülmaschine", "Gläser", "Drehstrom", "Wechselstrom", "Geschirr", "mit Trockenzone", "Nachspülung kalt", "Nachspülung umschaltbar", "Nachspülung heiß", "PT Besteck", "UC Besteck", "Kurzprogramm", "DIN-Programm")
  se = Array("Undercounter dishwasher", "Passthrough dishwasher", "Utensil washer", "Former cutlery washer", "Glasses", "three-phase current", "alternating current", "Dishes", "with drying zone", "cold rinse", "switchable rinse", "hot rinse", "PT Cutlery", "UC Cutlery", "Short programme", "Medium programme")

  sn = IIf(Range("AF4") = "English", sd, se)
  sp = IIf(Range("AF4") = "English", se, sd)
 
  For j = 0 To UBound(sn)
    ActiveSheet.UsedRange.Columns(6).Resize(, 25).Replace sn(j), sp(j)
  Next
End Sub