| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| PLM TechnologieForum Leipzig |
Autor
|
Thema: Feldnamen dynamisch erzeigen (1389 / mal gelesen)
|
pampel Mitglied Lehrer
Beiträge: 236 Registriert: 18.10.2005
|
erstellt am: 18. Apr. 2016 10:24 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, in ein Formular möchte ich Werte per VBA eintragen. Dazu möchte ich eine FOR-NEXT-Schleife benutzen. Da das aber mehr wie 50 Felder in dem Formular sind möchte ich nicht alle Felder nach dem Schema Forms.Formular.Feldname01.Value = ... Forms.Formular.Feldname02.Value = ... Forms.Formular.Feldname03.Value = ... ... mit Werten belegen sondern ich will die Nummer mit einer Zählvariablen der FOR-NEXT-Schleife sinngemäß wie folgt dynamisch erzeugen: i = 1 FOR Forms.Formular.Feldname0>i<.Value = ... i = i + 1 NEXT Wie kann ich das machen? Danke für Hinweise.
Gruß, Stefan ------------------ SW 2014 Academic Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pampel Mitglied Lehrer
Beiträge: 236 Registriert: 18.10.2005
|
erstellt am: 18. Apr. 2016 10:37 <-- editieren / zitieren --> Unities abgeben:
|
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 18. Apr. 2016 16:30 <-- editieren / zitieren --> Unities abgeben: Nur für pampel
Hallo pampel, auch wenn das hier das Falsche Brett ist mal ein Lösungsvorschlag. In diesem Beispiel werden 3 Eingabefleder erzeugt mit gleichem Abstand. Code: Private Sub UserForm_Initialize() Dim objTextBox As MSForms.TextBox Dim i As Integer i = 0For i = 0 To 2 Set objTextBox = Me.Controls.Add("Forms.TextBox.1", "TEXTBOXNAME" & i, True) With objTextBox .Left = 6 .Top = 6 + (22 * i) .Width = 72 .Height = 20 End With Set objTextBox = Nothing Next i End Sub
Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 18. Apr. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 19. Apr. 2016 08:16 <-- editieren / zitieren --> Unities abgeben: Nur für pampel
Hallo Stefan, in VBA gibt es leider keine Control-Arrays, das wirst du nicht so machen können wie du dir das vorstellst. Und den Namen des Textfelds vorher zusammenzusetzen würde ein doppeltes Parsen der Codezeile bedeuten, ich glaube nicht, dass VBA das kann (MEDUSA konnte das mit dem @-Trick, aber das ist auch schon 25 Jahre her ) Du kannst diese Art von Array, genauer eigentlich Collection, aber indirekt ansprechen. Es gibt für die Forms und auch z.B. für Frames (also die Objekte, die andere Controls wie Textfelder beinhalten können) eine Eigenschaft, in der diese Controls gesammelt sind. Diese kannst du über eine laufende Nummer ansprechen. Die Nummer innerhalb dieser Control-Collection kommt durch den Einfügezeitpunkt zustande, nicht über den Namen der Textbox. Ich hab ein kleines Beispiel gepuzzelt, Aufbau der Form und der Textfelder siehe Screenshot, der Codeschnipsel sieht so aus:
Code: Private Sub CommandButton1_Click() Dim AnzahlControlsInFrame As Long Dim AusgabeText As String AnzahlControlsInFrame = Frame1.Controls.Count For i = 0 To AnzahlControlsInFrame - 1 AusgabeText = i & ": " AusgabeText = AusgabeText & Frame1.Controls.Item(i).Name & " " AusgabeText = AusgabeText & Frame1.Controls.Item(i).Text Debug.Print AusgabeText Next End Sub
Ich habe die Textfelder deswegen in einen Frame gepackt, weil du ja üblicherweise auf der Userform noch eine Menge anderer Controls hast (vor allem bei 50 Textfeldern ). Vielleicht ist das ein Ansatz für dich, ansonsten bleibt wohl nur viele Zeilen Code zu schreiben Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2776 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 19. Apr. 2016 13:28 <-- editieren / zitieren --> Unities abgeben: Nur für pampel
Hallo zusammen, also bei mir funktionierte das Abrufen mit dem von mir "vordefinierten" Namen bei meinem Test. Code: Private Sub CommandButton1_Click()i = 0 For i = 0 To 2 MsgBox Me.Controls("TEXTBOX" & i).Value Next i End Sub
Gruß Bernd ------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Projektingenieur Automations (m/w/d) | Vor 65 Jahren modernisierte TAMPOPRINT die Druckbranche. Um die Übertragung von Farbe auf gekrümmte oder uneben beschaffene Materialien und Körper zu verbessern, entwickelte unser Firmengründer Wilfried Philipp den industriellen Tampondruck. Heute ist TAMPOPRINT ein weltweit anerkanntes, familiengeführtes Unternehmen und bietet standardisierte wie automatisierte Lösungen für Tampondruck und ... | Anzeige ansehen | Automatisierungstechnik |
|
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 20. Apr. 2016 07:43 <-- editieren / zitieren --> Unities abgeben: Nur für pampel
|