Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  VBA Form eintragen mit Attributen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von vittorio0 an!   Senden Sie eine Private Message an vittorio0  Schreiben Sie einen Gästebucheintrag für vittorio0

Beiträge: 35
Registriert: 13.07.2009

AutoCAD 2009, 2011, Access 2003

erstellt am: 13. Jul. 2009 13:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



Sehen Sie sich das Profil von vittorio0 an!   Senden Sie eine Private Message an vittorio0  Schreiben Sie einen Gästebucheintrag für vittorio0

Beiträge: 35
Registriert: 13.07.2009

AutoCAD 2009, 2011, Access 2003

erstellt am: 13. Jul. 2009 17:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



Sehen Sie sich das Profil von vittorio0 an!   Senden Sie eine Private Message an vittorio0  Schreiben Sie einen Gästebucheintrag für vittorio0

Beiträge: 35
Registriert: 13.07.2009

AutoCAD 2009, 2011, Access 2003

erstellt am: 15. Jul. 2009 00:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat


20090714_AttToForm_AN01.zip

 
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



Sehen Sie sich das Profil von vittorio0 an!   Senden Sie eine Private Message an vittorio0  Schreiben Sie einen Gästebucheintrag für vittorio0

Beiträge: 35
Registriert: 13.07.2009

AutoCAD 2009, 2011, Access 2003

erstellt am: 15. Jul. 2009 07:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo alfred
Besten Dank, ich werde mir das mal durcharbeiten.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz