| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY präsentiert die PRO Elite™ High Endurance microSD-Flash-Speicherkarten für Videoüberwachung und kontinuierliche Aufzeichnung, eine Pressemitteilung
|
Autor
|
Thema: VBA Form eintragen mit Attributen (679 mal gelesen)
|
vittorio0 Mitglied

 Beiträge: 35 Registriert: 13.07.2009 AutoCAD 2009, 2011, Access 2003
|
erstellt am: 13. Jul. 2009 13:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo Forum ich habe eine VBA Form die ich mit dem folgenden Code ausfülle: 'Get the block's attributes Tatts = ssnew.Item(0).GetAttributes frmEditAttr.F6.Text = (LTrim(Tatts(0).TextString)) frmEditAttr.F7.Text = (LTrim(Tatts(1).TextString)) frmEditAttr.F5.Text = (LTrim(Tatts(2).TextString)) frmEditAttr.F42.Text = (LTrim(Tatts(3).TextString)) frmEditAttr.F46.Text = (LTrim(Tatts(4).TextString)) frmEditAttr.F38.Text = (LTrim(Tatts(5).TextString)) frmEditAttr.F4.Text = (LTrim(Tatts(6).TextString)) frmEditAttr.F43.Text = (LTrim(Tatts(7).TextString)) frmEditAttr.F47.Text = (LTrim(Tatts(.TextString)) frmEditAttr.F23.Text = (LTrim(Tatts(9).TextString)) frmEditAttr.F10.Text = (LTrim(Tatts(10).TextString)) frmEditAttr.F39.Text = (LTrim(Tatts(11).TextString)) frmEditAttr.F8.Text = (LTrim(Tatts(12).TextString)) frmEditAttr.F11.Text = (LTrim(Tatts(13).TextString)) frmEditAttr.F9.Text = (LTrim(Tatts(14).TextString)) frmEditAttr.F1.Text = (LTrim(Tatts(15).TextString)) frmEditAttr.F17.Text = (LTrim(Tatts(16).TextString)) frmEditAttr.F16.Text = (LTrim(Tatts(17).TextString)) frmEditAttr.F1B.Text = (LTrim(Tatts(1.TextString)) frmEditAttr.F1A.Text = (LTrim(Tatts(19).TextString)) ich möchte den code aber mit einer for i loop ersetzen, dabei hab ich aber das Problem die Felder F?? im formular zu referenzieren. Mit MsgBox (LTrim(Tatts(i).TagString)), , Tatts(i).TextString wird der Attributname des Attributs und dessen Inhalt korrekt angezeit.
Der folgende Code jedoch liefert mir eine Fehlermeldung: Error 424 Objekt erforderlich 'display the attributes in frmEditAttr Dim i As Integer For i = 0 To 19 ' MsgBox (LTrim(Tatts(i).TagString)), , Tatts(i).TextString frmEditAttr.Tatts(i).TagString.Text = (LTrim(Tatts(i).TextString)) Next i meiner Ansicht sollte der Ausdruck frmEditAttr.Tatts(i).TagString.Text frmEditAttr.F4.Text ergeben.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 13. Jul. 2009 15:38 <-- editieren / zitieren -->
Hi, Du wirst die Felder im Form neu machen müssen, und dabei Namen für die Controls vergeben, damit Du auch geordnet zugreifen kannst. Die noch bessere Variante wäre, die Controls zur Laufzeit zu erstellen (da weisst Du nämlich, wieviel Attribute Du hast und daher wieviele Controls Du brauchst). Der Code wäre dann: Dim tCont As TextBox Dim i As Integer For i = LBound(tatts) To UBound(tatts) Set tCont = Me.Controls("F" & i) 'Name des Controls für i=1 wäre dann F1 tCont.Text = tatts(i).TextString Next - alfred - ------------------ www.hollaus.at |
vittorio0 Mitglied

 Beiträge: 35 Registriert: 13.07.2009 AutoCAD 2009, 2011, Access 2003
|
erstellt am: 13. Jul. 2009 17:28 <-- editieren / zitieren --> Unities abgeben:         
Hi alfred besten Dank für Deine schnelle Antwort. Das mit LBound.. UBound find ich gut. Ich muss aber den .TagString (Attributbezeichner) auslesen da die Attribute von der Datenbank her wild durcheinander benannt sind, jedoch immer 20 an der Zahl. So muss ich dann i=1 dem Textboxfeld F7 zuweisen. So wie ich Deinen code lese wird nun i=1->F1 zugeordnet und i=2->F2 usw. Richtig? Siehst Du eine Möglichkeit das zu realisieren? Grus aus Bern, viktor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 13. Jul. 2009 20:12 <-- editieren / zitieren -->
Hi, dann versteh ich Deine Frage nicht wirklich, wenn Du fix an den Indizes des Attribute-Array's die Controls befüllen willst, dann hast Du ja den Code schon gefunden. Ich hab in meinem Beispiel gezeigt, wie Du einen Controlnamen als String zusammensetzen kannst und davon dann ableiten kannst, wie Du zum Control kommst. Abgesehen davon, dass ich mich nie auf die Reihenfolge des Attribute-Array's verlassen würde, wüsste ich nicht, wie man eine willkürliche Zusammensetzung (Attindex zu Controlname) 0 in 6, 1 in 7, 2 in 5, ... anders machen sollte. Eine Hilfestellung könnte noch sein (und damit wirst Du ungebunden von Index), wenn Du die Textfelder in Deinem Form Namen der Attributes-Tagstrings vergibst, wenn z.B. ein Attribut den Namen 'PREIS' hat, dann dem entsprechenden Control den Namen TXT_PREIS geben, dann könnte der Code so aussehen. Code: Dim tCont As TextBox Dim i As Integer For i = LBound(tatts) To UBound(tatts) Set tCont = Me.Controls("TXT_" & tatts(i).TagString) tCont.Text = tatts(i).TextString Next
Sonst würde ich die Frage nicht verstanden haben, wo ich jetzt noch helfen könnte. - alfred - ------------------ www.hollaus.at |
Ex-Mitglied
|
erstellt am: 14. Jul. 2009 00:03 <-- editieren / zitieren -->
Hi nochmals, jetzt erst gesehen, der Fehlercode kommt bei dieser Zeile zustande: frmEditAttr.F47.Text = (LTrim(Tatts(.TextString)) ==> da fehlt die Indexangabe und die nachfolgende Klammer (vor '.TextString') und in dieser Zeile fehlt eine Klammer (nach dem Indexwert '1') frmEditAttr.F1B.Text = (LTrim(Tatts(1.TextString)) - alfred - ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 14. Jul. 2009 editiert.] |
vittorio0 Mitglied

 Beiträge: 35 Registriert: 13.07.2009 AutoCAD 2009, 2011, Access 2003
|
erstellt am: 15. Jul. 2009 00:25 <-- editieren / zitieren --> Unities abgeben:         
Hi alfred danke für den Hinweis. Bei mir im code sind die beiden Zeilen ok, muss wohl beim reinkopieren passiert sein. Ich hab wohl noch einige Lücken in vba und autocad, versteh Dein code nicht wirklich und kann dies auch nicht mit meinem Formular (frmEditAttr) und den zugehörigen Textboxes (F1 F5 F6 usw) benannt sind, verbinden. Kannst Du die Zeilen noch etwas ausdeutschen für mich? Besten Dank. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Jul. 2009 00:29 <-- editieren / zitieren -->
Hi, wenn Du schnell bist und mit eine Zeichnung mit ein paar von Deinen Blöcken schickst, dann mach ich Dir jetzt ein Beispiel zum abkupfern. Wenn Du nicht schnell bist, dann wird's ein wenig dauern. - alfred - ------------------ www.hollaus.at |
Ex-Mitglied
|
erstellt am: 15. Jul. 2009 01:13 <-- editieren / zitieren -->
Hi, ok, ich hab nicht gewartet, keine Ahnung wann ich morgen dazugekommen wäre Das beiliegende Beispiel zeigt Dir, wie alleine durch Benennung der Controls im Form 'F_Main' der Code weiss, welches Attribut aus einem Block wohin geschrieben wird. Der Code geht durch alle Attribute eines selektierten Blocks. Für das Attribut 'PNR' wird im Form 'F_Main' ein Control 'L_PNR' gesucht ==> dort die Attributsbezeichnung hineingeschrieben (macht wenig Sinn, nur als Beispiel), und dann wird nach einer TextBox 'TXT_PNR' gesucht, und dort wird der Attributswert hineingeschrieben. Damit brauchst Du nicht mehr Att1 nach F7 und Att2 nach F2 usw. denken und auch nicht mehr so (kreuzweise) ausfüllen, es zählen alleine die Attributsbezeichnungen und die Namen der Controls, die Du vergibst. Hoffe es ist mit diesem Beispiel besser verständlich. - alfred - ------------------ www.hollaus.at [Diese Nachricht wurde von a.n. am 15. Jul. 2009 editiert.] |
vittorio0 Mitglied

 Beiträge: 35 Registriert: 13.07.2009 AutoCAD 2009, 2011, Access 2003
|
erstellt am: 15. Jul. 2009 07:36 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |