VBA Such-Ersetz-Array
#1
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!
Top
#2
Hallo,

jetzt soll man nach deinem (unvollständigen) Makro die Datei nachbauen, um auf Fehlersuche gehen zu können?
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
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
Top
#4
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#5
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.
Top
#6
Danke Mase das hat funktioniert!
Vielen Dank auch an alle anderen Smile
Top
#7
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
Top
#8
(20.07.2020, 11: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:
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#9
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Top


Gehe zu:


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