mobby83
Goto Top

VBS: mehrere ClickBox Objekte automatsch füllen (ohne Array)

Hallo Forum,

ich bin "neu" hier, auch wenn ich hier schon oft anwesend war und hilfreiche Tipps fand. Heute bin ich leider bezüglich meines Problems nicht fündig geworden.

Ich arbeite mit Mentor DxDesigner / Expedition und möchte mir da etwas Arbeitserleichterung verschaffen und scheitere an einer mMn einfachen Sache in VBS die in Windows-Batch problemlos möglich ist. Und zwar möchte ich einen Befehl (Objekt) mit einer Variablen dynamisch anpassen, um alle nötigen Objekte in einer Schleife zu bearbeiten. Leider lassen sich die Objekte nicht wie ein Array mit Klammern bezeichnen.(Die unschöne Lösung wäre alle möglich Objekte nacheinander explizit abzuarbeiten)

Sub Fuellen(VarAnzahl, MaxBreite)
Dim i
	' CheckBoxen (pro Variante)  
	For i = 1 To VarAnzahl
		With CheckBox_Variante & i 'das Objekt heißt "CheckBox_Variante1", CheckBox_Variante2" ...ect  
			.Text "Variantename " & i & " - Test Text"  
			.Enable = True
			.Visible = True
		End With
	Next
End Sub

Im Batch ist sowas recht einfach lösbar, daher nahm ich an, es geht auch in VBS irgendwie(?).

Batch Beispiel
set var1=ec
set var2=ho

REM Befehl direkt zusammengesetzt, Ausgabe "Test Text"  
	%var1%%var2% Test Text

Könnt ihr mir bitte helfen?

DANKE face-smile

Content-ID: 234417

Url: https://administrator.de/contentid/234417

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

mobby83
mobby83 03.04.2014 aktualisiert um 12:09:37 Uhr
Goto Top
Hallo nochmal,

ich habe mit meinen wohl noch unzureichendem Wissen weiter probiert und eine Idee. Leider funktioniert das so nicht face-sad
Ich poste sie, weil ich hoffe doch noch Jemanden auf die Lösung, die ich nicht finde, zu stoßen.

Sub Fuellen(VarAnzahl, MaxBreite) 
Dim i 
	For i = 1 To VarAnzahl
	Set VarObjNameNummer = GetObject (,"CheckBox_Variante" & i)  
		With VarObjNameNummer
			.Text "Variantename " & i & " - Test Text"  
			.Enable = True
			.Visible = True
		End With
	Next
End Sub
colinardo
colinardo 03.04.2014 um 13:08:21 Uhr
Goto Top
Hallo mobby,
so wie du das vorhast geht dies nicht. Du könntest z.B. über die Controls iterieren und dann nach dem Namen prüfen.
Wie das in deinem Programm Mentor jetzt explizit aussehen muss weiß ich nicht, aber generell könnte man es so schreiben:

for each control in deineForm.Controls
  if Left(control.Name,17) = "CheckBox_Variante" then  
     nummer = Mid(control.Name,18)
     control.Text = "Variantename " & nummer & " - Test Text"   
     control.Enable = True
     control.Visible = True
  End if
Next
Grüße Uwe
mobby83
mobby83 03.04.2014 um 14:00:22 Uhr
Goto Top
Hallo Uwe,

vielen Dank. Ich habe mich mMn nicht ausreichend genau ausgedrückt. Ich versuche es nochmal anders zu umschreiben. Das Programm von Mentor sollte kein Hemmschuh darstellen. Wie das Objekt heißt ist eigentlich egal. Ich versuche es daher noch etwas zu abstrahieren.

 DurchlaufAnzahl = 3 ' beliebige Zahl  
For i = 1 To DurchlaufAnzahl
	With ("ObjektName" & i)   
		.Text "Text"  
		.Enable = True
		.Visible = True
	End With
Next

Mein Problem ist, dass ich gern "ObjektName" & i zusammengesetzt nutzten möchte, denn das zu bedienende Objekt heißt ObjektName1, ObjektName2, ObjektName3, usw. Leider fand ich bisweilen keine Möglichkeit die Objektname dynamisch zu verändern.

Bei deiner Variante Uwe (hab ich versucht zu testen) hab ich das Problem, dass ich nicht weiß, wie ich die "Controls" anspreche. Nach etwas suchen, denke ich diese Auflistung gibts nicht face-sad

Gibts nicht doch eine Möglichkeit ObjektNamen zusammen zusetzen? Wenn ich nur ein Objekt hätte. zB: "ObjektName1", dann ginge es auch mit "Set VarObjName = ObjektName1", aber o.g. Bsp. will eben leider nicht.
colinardo
Lösung colinardo 03.04.2014, aktualisiert am 04.04.2014 um 10:58:16 Uhr
Goto Top
Zitat von @mobby83:
vielen Dank. Ich habe mich mMn nicht ausreichend genau ausgedrückt. Ich versuche es nochmal
doch das hast du
Mein Problem ist, dass ich gern "ObjektName" & i zusammengesetzt nutzten möchte, denn das zu bedienende
Objekt heißt ObjektName1, ObjektName2, ObjektName3, usw. Leider fand ich bisweilen keine Möglichkeit die
Objektname dynamisch zu verändern.
wie bereits geschrieben geht dies mit VBS so nicht
"Controls" anspreche. Nach etwas suchen, denke ich diese Auflistung gibts nicht face-sad
Würde ich nochmal genau nachsehen, denn sowas gibt es fast in jeder Umgebung wo mit Steuerelementen gearbeitet wird...
Alternativ suche im Funktionsarchiv des Programms nach einer Funktion ähnlich wie Controls("Name_des_Controls") womit sich das das Steuerelement mit seinem Namen ansprechen lässt, dann kannst du wieder mit deiner Schleife arbeiten.

In Excel VBA auf einer Form geht das z.B. so
for i = 0 to 10
  set deinControl = Controls("Variante" & i)  
  With deinControl
    ...
    ....
  Next
Next

Grüße Uwe
mobby83
mobby83 03.04.2014 um 14:46:14 Uhr
Goto Top
Dann werde ich mich mal auf die Suche machen. Danke Uwe