Anzeige
Archiv - Navigation
1300to1304
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Name Steuerelement ändert bei anderer Sprachvers.

Name Steuerelement ändert bei anderer Sprachvers.
27.02.2013 15:30:16
Nico
Hallo zusammen,
ich habe ein Makro in meiner Arbeitsmappe mit mehreren Kombinationsfeldern (Auswahl über Entwicklertools, Einfügen, Formularsteuerelemente, Kombinationsfeld) geschrieben. Das Makro regelt, dass bei einer Auswahl im ersten Steuerelement im zweiten und dritten Steuerelement jeweils die dazu passenden Angaben angezeigt werden. Also z.b:
Steuerelement 1: Automarke (Audi, BMW, Mercedes)
Steuerelement 2: Bezeichnung (Bei Auswahl Audi nur A1, A2, A3.., bei Auswahl BMW nur 320d, 320i...) usw.
Das Makro sieht folgendermassen aus:
Sub Fill_Shapes()
Sheet4.Columns.Hidden = False 'All columns shown
Sheet4.Rows.Hidden = False 'All rows shown
Select Case Sheet4.Cells(7, 23).Value 'W7
Case 1 ' Empty
Application.ScreenUpdating = False
'Shape empty
Sheet4.Shapes("Dropdown 9").Select
With Selection
.ListFillRange = "Variabel!$J$63:$J$64"
.LinkedCell = "$W$9"
.DropDownLines = 2
.Display3DShading = True
End With
Case 2 ... usw.
bis alle Cases durch sind. Das Makro ist beim ersten Steuerelement hinterlegt, so dass es bei einer Auswahl im ersten Steuerelement ausgeführt wird. Dies funktioniert auch wunderbar bei mir und all meinen Kollegen neben mir. Nur habe ich das Problem, dass bei Kollegen mit einer Englischen Excel-Sprachversion das Makro nicht ausgeführt werden kann. Die Fehlermeldung besagt, dass das Objekt "Dropdown 9" nicht gefunden werden kann. Als ich im Namensfeld des entsprechenden Steuerelements in der englischen Version nachschaute, stand dort: "Drop Down 9"!
Der Name des Steuerelements hat sich also in der englischen Version verändert in dem ein Leerschlag dazwischengeschoben wurde. Erschwerend kommt hinzu, dass nicht alle Steuerelemente einen anderen Namen haben. (ca. 70% anderst, 30% blieben gleich[Dropdown 9])
Weiss jemand wieso dies so ist? Kann ich einfach die Steuerelement anderst benennen, so dass sie in der englischen Version erkannt werden? Besten Dank für eure Hilfe

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Name Steuerelement ändert bei anderer Sprachvers.
27.02.2013 18:23:17
Uduuh
Hallo,
im Entwurfsmodus das Steuerelement anklicken und dann im Namenfeld einen Namen vergeben. Der sollte sich dan nicht mehr ändern.
Gruß aus’m Pott
Udo

AW: Name Steuerelement ändert bei anderer Sprachvers.
27.02.2013 18:36:13
Luschi
Hallo Nico,
hier muß man mit Objektvariablen arbeiten. In diesem Beispielcode habe ich 12 Kombinationsfelder auf einer Tabellenseite, die alle schön durchnummeriert sind.
Es können aber auch noch andere Elemente drin sein (Bilder, allerlei Elemente aus der Illustrationen-Sammlung, Grafiken usw.
Deshalb werden alle Shapes-Elemente (auch die Steuerelemente gehören dazu!!!) in einer Schleife durchlaufen und die 12 Kombiboxen herausgefischt. Diese werden einer Objektvariablen zugeordnet.
Sollten Sprünge in der Durchnummerierung der Kombiboxen drin sein, dann muß man noch nacharbeiten.
Wichtig ist, daß 'Drop Down 9' zu dd9 gehört. Da nur die ersten 4 Zeichen des Namens getestet werden, ist es egal, ob die Kombibox sich 'Drop Down 9' oder 'DropDown 9' schimpft; außer Du hast ein Shape-Element in 'DroppelHoppel' umbenannt - kann knallst natürlich!
Laß Dich von der RegEx-Funktionalität nicht abschrecken, das Ding ist so gut und altbewährt und _ kann wahre Wunderdinge aus Texten herausfiltern. Ihre Aufgabe ist, die Nummerierung der Kombiboxen auszulesen: Gäbe es nur 9 Stück und alles ist schön durchnummeriert, könnte man sich es ja Einfacher machen.

Sub Fill_Shapes()
Dim regEx As Object
Dim dd0 As Object, dd1 As Object, dd2 As Object, dd3 As Object, dd4 As Object
Dim dd5 As Object, dd6 As Object, dd7 As Object, dd8 As Object, dd9 As Object
Dim dd10 As Object, dd11 As Object, dd12 As Object
Dim i As Integer, s As String
'Objekt zum filtern von Suchwerten in Strings
'in diesem Beispiel die Zahl im Steuerelementnamen
Set regEx = CreateObject("Vbscript.Regexp")
'die Steuerelement gehören auch zur Shapes-Auflistung'
For Each dd0 In Sheet4.Shapes
'Name des Shape-Elements
s = dd0.Name
'Debug.Print s
'Name muß mit 'Drop' beginnen
If Left(s, 4) = "Drop" Then
'Zahl aus dem Namen ermitteln
i = getZahl(regEx, s)
'Debug.Print i
'entsprechend der Zahl der Objektvariablen das DropDown-Element zuweisen
Select Case i
Case 1: Set dd1 = dd0
Case 2: Set dd2 = dd0
Case 3: Set dd3 = dd0
Case 4: Set dd4 = dd0
Case 5: Set dd5 = dd0
Case 6: Set dd6 = dd0
Case 7: Set dd7 = dd0
Case 8: Set dd8 = dd0
Case 9: Set dd9 = dd0
Case 10: Set dd10 = dd0
Case 11: Set dd11 = dd0
Case 12: Set dd12 = dd0
End Select
End If
Next dd0
Set regEx = Nothing
'ab jetzt mit den Objektvariablen und nicht dem dazugehörigen Namen arbeiten
dd4.Select
End Sub
'siehe: https://www.herber.de/forum/archiv/1176to1180/1177805_Zahl_im_String_finden_VBA.html
' Liest Zahlen aus einem String heraus
' matchNr gibt an, welcher Treffer ausgelesen werden soll
Function getZahl(ByVal xRegEx As Object, ByVal myStr As String, Optional ByVal matchNr As  _
Integer = 1) As Integer
Dim Matches As Object
' 
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Name Steuerelement ändert bei anderer Sprachvers.
28.02.2013 12:51:04
Nico
Hi Luschi,
besten Dank für deine umfassende Antwort. Ich habe den Code jetzt mal in mein File transferiert.
Mir ist jetzt nur noch nicht ganz klar, wie ich mit dem Objekt weiterfahren kann, damit mein Shape mit dem entsprechenden content aufgefüllt wird? So sieht es jetzt im Moment aus:
Sub Create_Objects_for_Fill_Shapes()
Application.ScreenUpdating = False
Sheet4.Unprotect ("XXXX")              'unprotect Daten
Tabelle11.Unprotect ("XXXX")           'unprotect Variabel
Sheet4.Columns.Hidden = False          'All columns shown
Sheet4.Rows.Hidden = False             'All rows shown
Dim regEx As Object
Dim dd0 As Object, dd1 As Object, dd2 As Object, dd10 As Object, dd4 As Object
Dim dd6 As Object, dd24 As Object, dd7 As Object, dd8 As Object
Dim i As Integer, s As String
Set regEx = CreateObject("Vbscript.Regexp")
For Each dd0 In Sheet4.Shapes
s = dd0.Name
If Left(s, 4) = "Drop" Then
i = getZahl(regEx, s)
Select Case i
Case 1: Set dd1 = dd0     'Dropdown 1
Case 2: Set dd2 = dd0     'Dropdown 2
Case 10: Set dd10 = dd0   'Dropdown 10
Case 4: Set dd4 = dd0     'Dropdown 4
Case 6: Set dd6 = dd0     'Dropdown 6
Case 24: Set dd24 = dd0   'Dropdown 24
Case 7: Set dd7 = dd0     'Dropdown 7
Case 8: Set dd8 = dd0     'Dropdown 8
End Select
End If
Next dd0
Set regEx = Nothing
dd2.Select
End Sub


Function getZahl(ByVal xRegEx As Object, ByVal myStr As String, Optional ByVal matchNr As _
Integer = 1) As Integer
Dim Matches As Object
If matchNr 

Sub Fill_Shapes()
Select Case Sheet4.Cells(7, 23).Value 'W7
Case 1       ' Empty
Application.ScreenUpdating = False
'Shape empty
Sheet4.Objects("dd2").Select
With Selection
.ListFillRange = "Variabel!$J$63:$J$64"
.LinkedCell = "$W$9"
.DropDownLines = 2
.Display3DShading = True
End With
Application.ScreenUpdating = True
Case 2       '  ABC
...usw.
Case Else
End Select
Sheet4.Columns.Range("W:AX").Columns.Hidden = True     'Hide columns W to AX
Sheet4.Rows.Hidden = False                             'All rows shown
Sheet4.Protect ("XXXX")                                'protect Daten
Tabelle11.Protect ("XXXX")                             'protect Variabel
Application.ScreenUpdating = True
End Sub
Die Frage ist jetzt: Wie fahre ich mit dem Objekt weiter um meine Abfrage (Cases) zu steuern?
(Fett hinterlegter teil; denn Sheet4.Objects("dd2").Select frisst er nicht)
Besten Dank

Anzeige
AW: Name Steuerelement ändert bei anderer Sprachvers.
28.02.2013 14:26:48
Luschi
Hallo Nico,
wenn die Prozedur 'Sub Fill_Shapes()' im gleichen Modul liegt wie die anderen, dann
repräsentiert die Objectvariable 'dd2' die ComboBox 'DropDown 2' und sollte so
funktionieren:

Sub Fill_Shapes()
Select Case Sheet4.Cells(7, 23).Value 'W7
Case 1       ' Empty
Application.ScreenUpdating = False
'Shape empty
With dd2
.Select
.ListFillRange = "Variabel!$J$63:$J$64"
.LinkedCell = "$W$9"
.DropDownLines = 2
.Display3DShading = True
End With
Application.ScreenUpdating = True
Case 2       '  ABC
...usw.
Case Else
End Select
'usw.
End Sub
Wenn die Prozedur in einem anderen Modul liegt, dann müssen die
Objeckvariablen die Kennung 'Public' erhalten.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Name Steuerelement ändert bei anderer Sprachvers.
28.02.2013 17:12:58
Nico
Hi Luschi,
funktioniert leider immer noch nicht. Es kommt immer: Variable nicht definiert (dd2 unter Case 1 'Shape empty). Irgendetwas mach ich noch falsch :-(
Mein Makro sieht nun folgendermassen aus:
Option Explicit
Sub Create_Objects_for_Fill_Shapes()
Application.ScreenUpdating = False
Sheet4.Unprotect ("XXXX")              'unprotect Daten
Tabelle11.Unprotect ("XXXX")           'unprotect Variabel
Sheet4.Columns.Hidden = False          'All columns shown
Sheet4.Rows.Hidden = False             'All rows shown
Dim regEx As Object
Dim dd0 As Object, dd1 As Object, dd2 As Object, dd10 As Object, dd4 As Object
Dim dd6 As Object, dd24 As Object, dd7 As Object, dd8 As Object
Dim i As Integer, s As String
Set regEx = CreateObject("Vbscript.Regexp")
For Each dd0 In Sheet4.Shapes
s = dd0.Name
If Left(s, 4) = "Drop" Then
i = getZahl(regEx, s)
Select Case i
Case 1: Set dd1 = dd0
Case 2: Set dd2 = dd0
Case 3: Set dd10 = dd0
Case 4: Set dd4 = dd0
Case 5: Set dd6 = dd0
Case 6: Set dd24 = dd0
Case 7: Set dd7 = dd0
Case 8: Set dd8 = dd0
End Select
End If
Next dd0
Set regEx = Nothing
dd2.Select
End Sub


Function getZahl(ByVal xRegEx As Object, ByVal myStr As String, Optional ByVal matchNr As _
Integer = 1) As Integer
Dim Matches As Object
If matchNr 

Sub Fill_Shapes()
Select Case Sheet4.Cells(7, 23).Value 'W7
Case 1       ' Empty
Application.ScreenUpdating = False
'Shape empty
With dd2
.Select
.ListFillRange = "Variabel!$J$63:$J$64"
.LinkedCell = "$W$9"
.DropDownLines = 2
.Display3DShading = True
End With
Application.ScreenUpdating = True
Case 2       '  ABC
... usw.
Case Else
End Select
Sheet4.Columns.Range("W:AX").Columns.Hidden = True     'Hide columns W to AX
Sheet4.Rows.Hidden = False                             'All rows shown
Sheet4.Protect ("XXXX")                                'protect Daten
Tabelle11.Protect ("XXXX")                             'protect Variabel
Application.ScreenUpdating = True
End Sub
Dies ist alles in einem Modul. Meine Steuerelemente auf dem Sheet4 heissen: Dropdown 1, Dropdown 2, Dropdown 10, Dropdown 4, Dropdown 6, Dropdown 24, Dropdown 7 und Dropdown 8.
Es gibt auf diesem Sheet keine anderen Steuerelemente. Ich möchte nun im untersten Teil (Fill_Shapes() das Steuerelement Dropdown 2 ansprechen und mit den Daten aus "Variabel!$J$63:$J$64" befüllen.

Anzeige
AW: Name Steuerelement ändert bei anderer Sprachvers.
28.02.2013 18:20:20
Luschi
Hallo Nico,
z.Z. sind die Objektvariablen dd1...dd24 in der Prozedur 'Create_Objects_for_Fill_Shapes()' definiert in der Form: Dim dd0 As Object, dd1 As Object, ...
Damit sind diese Variablen nur! in dieser Prozedur ansprechbar und verlieren ihre Gültigkeit in andere Prozeduren.
Damit man sie überall nutzen kann, verschiebe diese Dimensionierung (Dim dd0 As ...)
an den Anfang eines allgemeinen Moduls (nicht in Klassenmodul einer Tabelle) nach dieser Zeile:
Option Explicit
Public dd0 As Object, dd1 As Object, dd2 As Object, dd10 As Object, dd4 As Object
Public dd6 As Object, dd24 As Object, dd7 As Object, dd8 As Object
Dann ist der Zugriff von ÜBERALL in der Datei gewährleistet.
Gruß von Luschi
aus klein-Paris
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige