| |  | 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: Problem mit Aufruf von Sub (1039 mal gelesen)
|
vittorio0 Mitglied

 Beiträge: 35 Registriert: 13.07.2009 AutoCAD 2009, 2011, Access 2003
|
erstellt am: 29. Jan. 2012 21:23 <-- editieren / zitieren --> Unities abgeben:         
Liebes Forum bei dem folgenden code läuft alles gut bis zum Aufruf von UpdateAttrib. Fehlermeldung: Fehler beim kompilieren, Sub oder Function nicht definiert. tAtts ist markiert. Es scheint das die Sub einmal aufgerufen wird. Was mach ich da für ein Überlegungsfehler? Danke für Eure Hilfe. Code: Public Sub writeSF() ' Editierte Attribute zurück in Block schreiben Dim SF As StringOn Error GoTo err_control Dim EntGrp(1) As Integer Dim EntPrp(1) As Variant EntGrp(0) = 0 EntPrp(0) = "INSERT" EntGrp(1) = 2 EntPrp(1) = "Kopf1,Kopf1,Kopf1,Kopf10" Dim ssnew As AcadSelectionSet Dim tAtts As AcadAttribute ' Attribute des Blocks ' create a selection set On Error Resume Next Set ssnew = ThisDrawing.SelectionSets("TBLK") If Err.Number Then Set ssnew = ThisDrawing.SelectionSets.Add("TBLK") End If On Error GoTo 0 ' finde den Block ssnew.Select acSelectionSetAll, , , EntGrp, EntPrp 'If a block is found If ssnew.Count >= 1 Then MsgBox "Es sind " & ssnew.Count & " Blöcke in der Zeichnung vorhanden.", vbInformation, "Gefundene Blöcke..." Else MsgBox "kein Schriftfeld gefunden.", vbInformation, "update Schriftfeld..." Exit Sub End If 'Get the block's attributes tAtts = ssnew.Item(0).GetAttributes SF = ssnew.Item(0).Name Select Case SF Case "Kopf1" UpdateAttrib 0, frmEditAttr.F3.Text UpdateAttrib 1, frmEditAttr.F2.Text . . .
Sub
Code: Sub UpdateAttrib(TagNumber As Integer, BTextString As String) 'This procedure checks to see if the text box has a value. 'If it does, it applies the text to the attribute. 'If not, it applies an empty string to the attribute. If BTextString = "" Then tAtts(TagNumber).TextString = "" ' <<<<<=====Hier kommt Fehler: Fehler beim kompilieren, Sub oder Function nicht definiert Else tAtts(TagNumber).TextString = BTextString End If End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
 
 Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 30. Jan. 2012 08:07 <-- editieren / zitieren --> Unities abgeben:          Nur für vittorio0
Moin, die Variable tAtts ist in der Sub writeSF deklariert, das ist dann ihr Gültigkeitsbereich. In der Sub UpdateAttribd ist sie somit nicht bekannt. Die Fehlermeldung ist etwas irreführend, da VBA wegen der folgenden Klammern 'annimmt' es handele sich um eine Sub oder Funktion. Nun welche Auswege gibt es. 1. tAtts global deklarieren, also außerhalb von allen Subs. Das iszt allerdings schlechter Stil und wird schnell unübersichtlich, weil mann nicht nachvollziehen kann wann welche Sub hier den Wert ändert. 2. tAtts als Parameter an UpdateAttrib übergeben. Das muß dann per Ref geschehen (der Wert soll ja geändert werden) und ist somit ach nicht unbedingt guter Stil 3. UpdateAttrib als Function benutzen und den Wert zurückgeben Code: 'Get the block's attributes tAtts = ssnew.Item(0).GetAttributes SF = ssnew.Item(0).NameSelect Case SF Case "Kopf1" tAtts(0).TextString = UpdateAttrib(0, frmEditAttr.F3.Text) tAtts(0).TextString = UpdateAttrib(1, frmEditAttr.F2.Text) . . . Function UpdateAttrib(TagNumber As Integer, BTextString As String) As String If BTextString = "" Then UpdateAttrib = "" Else UpdateAttrib = BTextString End If End Function
Da fällt mir auf, was soll das ganze überhaupt
warum nicht einfach Code: tAtts(0).TextString = frmEditAttr.F3.Text tAtts(1).TextString = frmEditAttr.F2.Text
ohne Sub oder Function, die macht ja garnichts außer der ZuweisungGruß Peter [Diese Nachricht wurde von Comos User am 30. Jan. 2012 editiert.] ich bin heute auber auch ein schussel [Diese Nachricht wurde von Comos User am 30. Jan. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
vittorio0 Mitglied

 Beiträge: 35 Registriert: 13.07.2009 AutoCAD 2009, 2011, Access 2003
|
erstellt am: 30. Jan. 2012 08:31 <-- editieren / zitieren --> Unities abgeben:         
Moin Peter Besten Dank für die schnelle Antwort. Dein Vorschlag funktioniert solange im Formularfeld nicht der Wert Null steht. Steht da Null drin kommts zu einer Fehlermeldung beim zuweisen. Das mit der Funktion werde ich heute Abend ausprobieren. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Comos User Mitglied
 
 Beiträge: 112 Registriert: 23.03.2010
|
erstellt am: 30. Jan. 2012 10:06 <-- editieren / zitieren --> Unities abgeben:          Nur für vittorio0
Hi, ich noch mal: Ich kenne mich leider mit AutoCad kaum aus, dafür umsobesser mit VBA. Also: Zitat: Steht da Null drin kommts zu einer Fehlermeldung beim zuweisen
Das würde mich schon mal interessieren. Die .Text Eigenschaft aller mir bekannten Forms Elemente ist vom Typ String (bei dem Namen irgentwie logisch:nozwinker  , die .TextString Eigenschaft von AcadAtribute ist ebenfalls vom Typ String. Die Zuweisung sollte demnach immer möglich sein. Wo kommen die NULL-Werte überhaupt her und welche Fehlermeldung wird denn geworfen? Versuche mal das:
Code: tAtts(0).TextString = cstr(frmEditAttr.F3.Text) tAtts(1).TextString = cstr(frmEditAttr.F2.Text)
aber erklären kann man das nicht Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |