Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Problem mit Aufruf von Sub

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:  Problem mit Aufruf von Sub (1039 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: 29. Jan. 2012 21:23    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

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 String

On 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



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

Beiträge: 112
Registriert: 23.03.2010

erstellt am: 30. Jan. 2012 08:07    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 Nur für vittorio0 10 Unities + Antwort hilfreich

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).Name

Select 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 Zuweisung

Gruß
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



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: 30. Jan. 2012 08:31    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

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



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

Beiträge: 112
Registriert: 23.03.2010

erstellt am: 30. Jan. 2012 10:06    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 Nur für vittorio0 10 Unities + Antwort hilfreich

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 >>)

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