Clever-Excel-Forum

Normale Version: Dictionary auslesen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo wertes Forum,

ich bin mal wieder zu blöd für ein Dictionary.

In der angehängten Datei lese ich Texte in ein Dictionary ein.
Anschließend schrebe ich es per For-each-Schleife in das Direktfenster und finde alles wieder.

Aber alle Versuche ein bestimmtes Item auszugeben schlagen fehl.
Auch die Abfrage über . exists() sagt, dass der Key nicht vorhanden ist.

Wo ist mein Fehler?

Vielen Dank für Eure Hilfe,
Lutz
Hi

Hoffe du kannst es damit lösen.
Allgemein.
Code:
'Anlegen von Key und Item
'Variante 1
'dict.Add Key:="Orange", Item:=45
'dict.Add "Apple", 66
'dict.Add "12/12/2015", "John"
'wird versucht ein Key anzulegen der bereits vorhanden ist, gibt es eine Fehlermeldung
'dict.Add Key:="Orange", Item:=45 ' Key anlegen
'dict.Add Key:="Orange", Item:=75 ' diese Zeile erzeugt ein Fehler da Orange bereits Vorhanden ist

'Variante 2
' Diese schreibweise hat zwei Verhalten
'dict("Orange") = 45 'gibt es noch keinen Key(Orange) wird Key angelegt und Item 45 zugewiesen
'dict("Orange") = 100 'ist Key bereits Vorhanden wird nur Item geändert = 100

'-----------------------------------------------------------------------
'Prüfen ob ein bestimmter Key vorhanden ist
'If dict.Exists("Orange") Then

'-----------------------------------------------------------------------
'Rückgabe der Werte hinter einem Key
'Dim k As Variant
'For Each k In dict.Keys
    ' Print key and value
'   Debug.Print k, dict(k)
'Next

'------------------------------------------------------------------------
'Es wird unterschieden ob der Key als Text oder Zahl vorliegt
'If DD.exists("2000") Then MsgBox "ja"
'If DD.exists(2000) Then MsgBox "ja"
Gruß Elex
Hallo,

ich versuche es auch einmal:

Code:
intTransCol = .Cells(2, 1).EntireRow.Find(What:=lngLanguage, lookat:=xlPart).Column

    Set dictTranslation = CreateObject("scripting.dictionary")
    
    For intTransRow = 3 To .UsedRange.SpecialCells(xlCellTypeLastCell).Row
        dictTranslation.Add Cells(intTransRow, 1), Cells(intTransRow, intTransCol)
    Next intTransRow

Bei dieser Art der Füllung werden jedem Wert der Spalte A (sollte Schlüssel sein) zwei Werte zugeordnet (dt, engl). Damit sind die Schlüsseln nicht mehr eindeutig. Es gibt nur deswegen keinen Fehler, da die Zellen ohne (.Value) übergeben wurden.

mfg

(Code gelesen, aber nicht ausgeführt)
Hallo Fennek,

das war der Weg zum Erfolg  19.

Offensichtlich habe ich die Zelladresse in das Dictionary geschrieben. Damit findet er den Inhalt der Zelle als Key natürlich nicht.
Ich habe aus
Code:
dictTranslation.Add Cells(intTransRow, 1), Cells(intTransRow, intTransCol)
ein
Code:
dictTranslation.Add Cells(intTransRow, 1).Value, Cells(intTransRow, intTransCol).Value
gemacht und schon funzt's.

Vielen Dank für die Hilfe.

Gruß,
Lutz
Oder:

Code:
Sub M_snb()
  sn = Tabelle1.Cells(1, 2).CurrentRegion
 
  With CreateObject("scripting.dictionary")
    For j = 3 To UBound(sn)
        .Item(sn(j, 1)) = Array(sn(j, 2), sn(j, 3))
    Next
   
    MsgBox "Deutch " & vbTab & .Item(sn(5, 1))(0) & vbLf & "English " & vbTab & .Item(sn(5, 1))(1)
  End With
End Sub
Hallo zusammen,

vielleicht doch noch eine Frage am die Profis...

Mein Ziel ist, dass in meinem Makro alle Texte für Fehlermeldungen etc. in Deutsch, Englisch oder jeder anderen angelegten Sprache erscheinen.
Dazu habe ich ein Blatt "Translation" angelegt, dieses lese ich je nach Spracheinstellung in ein Dictionary und gebe dann bei Bedarf den Text über z.B. MsgBox dictTranslation("txtMissPlant"), vbOKOnly wieder aus.

Gibt es dazu eine elegantere Lösung?

Vielen Dank,
Lutz
Ein Bespiel würde helfen.
Wie weiss das Makro welche Sprache benützt werden sollte ?
Hallo snb,

ich habe nochmal ein Beispiel angehängt.

Im oberen Bereich habe ich einen Teil der Spracherkennung auskommentiert. Da kann für Versuchszwecke bei Bedarf die Sprache von 2057 auf 1031 umgestellt werden.
Unten werden über vier Msgboxen die jeweils eingelesenen Texte ausgegeben.

Ziel ist es, dass mein Makro bei mir deutsche Texte ausgibt und bei einem englischen Kollegen englische Texte. Sollte das Makro an einen spanischen Kollegen weitergereicht werden, könnten durch ergänzen der spanischen Bezeichnungen dort die Meldungen mit spanischem Text erscheinen.
Das sollte das Makro auch machen, allerdings weiß ich nicht, ob mein Weg gut ist oder ob es einen viel besseren Weg gibt, um Texte in verschiedenen Sprachen auszugeben.

Wie würdest Du das lösen?

Gruß,
Lutz
Ich verstehe nicht was du vorhast.
Wo steht die Text die übersetzt werden sollte ?
Hallo snb,

es soll nicht übersetzt werden, sondern in verschiedenen Sprachen angezeigt werden.

Als andere Erklärung:
In meinem Excel ist mein Speichern-Dialog in deutsch, deiner in niederländisch. Meine Menüleiste ist deutsch, deine niederländisch.
Wie bekomme ich es hin, dass mein Makro bei mir deutsch spricht ("Bitte Text eingeben:") aber bei dir niederländisch ("Voer tekst in:")?

Ich habe eine Tabelle gemacht, die alle Texte in allen Sprachen enthält, lese davon eine Spalte je nach Spracheinstellung in ein dictionary ein (deutsch 2.Spalte, englisch 3.Spalte) (der Key ist immer die 1.Spalte).
Wenn ich einen Text benötige, rufe ich im Code den Key auf und bekomme den entsprechenden Text aus dem dictionary.

Wenn Du in meine Beispieldatei laufen lässt, sind alle Msgboxen in englisch.
Kommentierst Du am Beginn des Codes die Zeile lngLanguage = 2057 aus und entfernst das Hochkomma bei lngLanguage = 1031, sind alle MsgBoxen auf deutsch.

Gruß,
Lutz
Seiten: 1 2