Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Einfügen von MTextObj - Fehler

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
  
NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
Autor Thema:  Einfügen von MTextObj - Fehler (1537 mal gelesen)
ToniM
Mitglied
Rekrut


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

Beiträge: 17
Registriert: 14.07.2005

AutoCAD 2005

erstellt am: 19. Jul. 2005 12:43    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,

Ich hab mein kleines Programm fertig (gehabt).
Es hat alles funktioniert, ganze 3 mal, denn dann trat eine
Fehlermeldung auf, obwohl ich KEIN ZEICHEN vor dem auftreten
des Fehlers verändert habe. Ich hab jediglich ein paar zeilen
angehängt!

Hier ein Teil des Codes:

startPoint(0) = l + HoeheX + PressplatteX - 2: startPoint(1) = (DBO / 2) - (Bolzendat / 2)
endPoint(0) = -l - HoeheX - PressplatteX + 2: endPoint(1) = (DBO / 2) - (Bolzendat / 2)
Set lineObj = m.AddLine(startPoint, endPoint)


    Dim text_daten(), text_werte(), text_units(), text_anz
    Dim k, i, insPnt(0 To 2), startPnt(0 To 2), endPnt(0 To 2) As Double
    Dim MTextObj As AcadText
    Dim width As Double
    Dim text As String
   
    text_anz = 19

    Set newLayer = ThisDrawing.Layers.Add("Text")
    newLayer.color = acWhite
    ThisDrawing.ActiveLayer = newLayer
   
    For i = 0 To text_anz Step 1
        insPnt(0) = 100:    insPnt(1) = 300# - i * 8: insPnt(2) = 0
        width = 300
        text = text_daten(i) & text_werte(i) & text_units(i)
        If i = 9 Then
            text = text & "        (" & p & "N/mm2)"
        End If

        Set MTextObj = ThisDrawing.ModelSpace.AddMText(insPnt, _
            text, width)            ' FEHLER
        MTextObj.Height = 5
    Next i

Ich erhalte immer diese Fehlermeldung:

Laufzeitfehler '5':
Ungültiger Prozeduraufruf oder ungültiges Argument

Könnte mir vielleicht irgend jemand weiter helfen?
Ich hab wirklich keinen blassen Dunst warum es zuerst
ging und auf einmal nicht mehr! (Bitte nicht lachen, wenn
die antwort so banal ist!)

LG martin

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 19. Jul. 2005 15:21    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 ToniM 10 Unities + Antwort hilfreich

Hi Martin,

drei kleine Dinge:

Code:

'1:
Dim MTextObj As AcadMText '<= tricky M? ;-)
'...
'2:
Set MTextObj = ThisDrawing.ModelSpace.AddMText(insPnt, _
            text, width)            ' FEHLER
'hier hast width & text verdreht
Set MTextObj = ThisDrawing.ModelSpace.AddMText(insPnt, _
            width, text)           ' kein FEHLER;-)


So und drittens, sowas ist gaaanz schlecht
Code:

Dim k, i, insPnt(0 To 2), startPnt(0 To 2), endPnt(0 To 2) As Double


Hier ist nur endPnt ein Double, der Rest Variant.
Also hinter jede variable die Deklaration packen, nicht nur hinter die Letzte.
[edit]
soll heissen, add.text/add.Mtext erwartet kein irgendein Eis am Stiel [Variant] als Übergabeparameter, sondern eben strikt ein Double(2)#
sonst nix ;-) [/edit]

HTHHope this helps (Hoffe, es hilft weiter) Nancy
--
God is real - until declared as integer.

[Diese Nachricht wurde von startrek am 19. Jul. 2005 editiert.]

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

ToniM
Mitglied
Rekrut


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

Beiträge: 17
Registriert: 14.07.2005

AutoCAD 2005

erstellt am: 20. Jul. 2005 06:47    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

Vielen Dank Nancy!

Ich war so verzweifelt, weil es zuerst funktioniert hat
(Warum auch immer?) und dann nicht mehr. Deshalb hab
ich mit MText, Text und Blöcken herumprobiert! Da ist was
beim Umendern daneben gegangen, SORRY!

Aber das mit den Deklarationen hab ich nicht gewusst
(ich bin C gewöhnt)! Vielen Dank dafür!!

(So nebenbei: Es funktioniert schon! Dank deiner Hilfe!)

LG Martin

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 20. Jul. 2005 21:56    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 ToniM 10 Unities + Antwort hilfreich

Hi Martin,

erstmal - büddeschön.
Die Frage nach dem 'Warum?' erst - dann plötzlich nicht mehr,
gute Frage - nächste Frage!;-)
Wenn insPnt ohne Deklaration, also variant ist, kommt bei mir mit
dieser Konstellation:

Code:

insPnt(0) = 100:    insPnt(1) = 300# - i * 8: insPnt(2) = 0
'sowas raus:
typeof insPnt() == Variant
insPnt(0) == Integer | insPnt(1) == Double | insPnt(2) == Integer

Vielleicht waren (0) und (2) tatsächlich auch mal Doubles,
und der Interpreter hats geschluckt - aber echt keine Ahnung,
nur Vermutung ... ;-)

lg Nancy

       

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

ToniM
Mitglied
Rekrut


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

Beiträge: 17
Registriert: 14.07.2005

AutoCAD 2005

erstellt am: 22. Jul. 2005 10:22    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 Nancy!

Vielen Dank für deine Hilfe bisher und gleich im voraus! *g*

Ich hätte da noch eine andere Frage zum Thema Block einfügen:

Dim blkSK
Dim BlockName As String

BlockName = CurDir & "\Schriftfeld_Programm.dwg"
Set blkSK = ThisDrawing.ModelSpace.InsertBlock(insPnt, BlockName, _
1#, 1#, 1#, 0)

' Warum brauch ich noch einmal: Set blkSK = ...
' Wenn ich diese nicht "Ein"-Kommentiere erhalte ich eine
' Fehlermeldung:

' BlockName = "Schriftfeld_Programm"
' Set blkSK = ThisDrawing.Blocks.Item(BlockName)


Außerdem:
Und weißt du auch wie ich "elegant" auf meine 40 Attribute in
diesem Block zugreifen kann?

Bis jetzt mach ich es mit der "Holzhammer"-Methode.
Mit Schleifen und Strings-Vergleichen.

Code:

For i = 0 To blkSK.Count - 1 Step 1
Set blkEL = blkSK.Item(i)
If StrComp(blkEL.EntityName, "AcDbAttributeDefinition") = 0 Then
For k = 0 To 16
If StrComp(blkEL.TagString, datenTextfeld(k)) = 0 Then
blkEL.TagString = werteTextfeld(k)
blkEL.TextString = werteTextfeld(k)
End If
Exit For
Next k
End If
Next i


Hast du einen (oder mehrere) Tipps für mich?


LG Martin

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 22. Jul. 2005 11:44    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 ToniM 10 Unities + Antwort hilfreich

Hi Martin,

na toll, mit Blöcken hab's ich nicht so und bin da auch nicht so der Erklärbär;-)

Wie ich das sehe [du auch, wennde mal ins Lokalfenster guggst] fügst Du erstmal
eine Blockreferenz ein - das ist gut. Dann setzt Du diese als Block - das ist schlecht.
Diesen Block musst Du nun unsinnigerweise wieder nach Attributen abschleifen, da ein AcadBlock kein HasAttributes unterstützt, eine Blockreferenz aber schon ...

Wiegesagt, so der Guru bin ich da auch nicht, aber versuchs mal so:

Code:

Sub asdf()
  Dim b As AcadBlockReference, atts
  Dim insP#(2), i%
  Set b = ThisDrawing.ModelSpace.InsertBlock(insP, "d:\dummy.dwg", 1#, 1#, 1#, 0#)
  If b.HasAttributes Then
      atts = b.GetAttributes
      For i = 0 To UBound(atts)
        atts(i).TextString = "bla" & i
      Next
  End If
End Sub

Gruss Nancy   

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 22. Jul. 2005 11:48    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 ToniM 10 Unities + Antwort hilfreich

Nur mal ein Vorschlag, Martin: Kannst du bitte den Code mit einem Code-Tag formatieren? Dann wäre das besser lesbar. In deinem letzten Posting gehen Code, Kommentare und Text irgendwie ziemlich durcheinander.

"Dim blkSK" ist desinformativ - dann schreib wenigstens "Dim blkSK as Variant" hin, dann weiss man, was man hat. Aber was ist denn da nun drin? Die Zeile "Set blkSK = ThisDrawing.Blocks.Item(BlockName)" ist ja auskommentiert. Aber die Zeile "Set blkSK = ThisDrawing.ModelSpace.InsertBlock(insPnt, BlockName, _
1#, 1#, 1#, 0)" scheint drin zu sein...


Überhaupt, geht es um die Blockdefinition mit Attributsdefinitionen oder um Blockreferenzen mit Attributen? Liest du jetzt ein Insert aus oder einen Block? Und wo kommt die Zahl 16 her? Es war doch die Rede von 40 Attributen!

Gruß, Axel Strube-Zettler

------------------
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

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

ToniM
Mitglied
Rekrut


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

Beiträge: 17
Registriert: 14.07.2005

AutoCAD 2005

erstellt am: 22. Jul. 2005 12: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

Ich hoffe jetzt ist es klarer, Axel.

Ich möchte einen Block aus einer bestehenden Zeichnung einfügen und die Attribute, die darin vorkommen, ausfüllen. So, das ist mein Plan! *g*

So sieht mein Code aus (Die arrays sind beschrieben - Platzmangel).
Ich hab unten ein Kommentar eingefügt.
Wenn ich diese beiden Zeilen weg lasse, erhalte ich einen Fehler.

Code:
   
Dim datenTextfeld(), werteTextfeld()
Dim blkSKDim insPnt(2) As Double
Dim BlockName As String
Dim ar As Variant

    insPnt(0) = 100:    insPnt(1) = 0:    insPnt(2) = 0
   
    BlockName = CurDir & "\Schriftfeld_Programm.dwg"
    Set blkSK_exp = ThisDrawing.ModelSpace.InsertBlock(insPnt, _
        BlockName, 1#, 1#, 1#, 0)
    BlockName = "Schriftfeld_Programm"            ' Diese und die naechste Zeile
    Set blkSK = ThisDrawing.Blocks.Item(BlockName)
   
    For i = 0 To blkSK.Count - 1 Step 1
        Set blkEL = blkSK.Item(i)
        If StrComp(blkEL.EntityName, "AcDbAttributeDefinition") = 0 Then
            For k = 0 To 36
                If StrComp(blkEL.TagString, datenTextfeld(k)) = 0 Then
                    blkEL.TagString = werteTextfeld(k)
                    blkEL.TextString = werteTextfeld(k)
                End If
            Next k
        End If
    Next i


Der Block soll zum leichteren Lesen in die Zeichnung eingefügt werden und soll mit errechneten Werten gefüllt sein.

Gruß Toni

------------------
Grüße TONI

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Die Phönizier haben das Geld erfunden - aber warum so wenig?
(Johann Nepomuk Nestroy)

erstellt am: 22. Jul. 2005 16:48    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 ToniM 10 Unities + Antwort hilfreich

Ich werde nach wie vor den Verdacht nicht los, dass du die Kombinationen BLOCK/ATTDEF und INSERT/ATTRIBUT verwechselt. Wenn du wirklich die Blockdefinition verändern willst, dann brauchst du kein Programm dafür - einmal URSPRUNG, ändern und wieder speichern. Und falls du doch die Defintion ändern willst - warum fügst du dann überhaupt eine Referenz ein? Sinn macht das doch nur, wenn du die Attribute der Blockreferenz ausfüllen willst, oder?

Gruß, Axel Strube-Zettler

------------------
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze

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

ToniM
Mitglied
Rekrut


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

Beiträge: 17
Registriert: 14.07.2005

AutoCAD 2005

erstellt am: 25. Jul. 2005 06: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

Entschuldige, dass ich mich erst jetzt melde, hab am FR schon Feierabend gemacht!

Mein Vorhaben:


  1. Einen (bestehenden) Block in meine aktuelle Zeichnung einfügen
  2. Die Attribute in diesen Block möchte ich mit errechneten Werten ausfüllen

Der Code ist nur das Ergebnis meiner "Probiererei". Ich hab keine Ahnung ob ich dazu BLOCK/ATTDEF odgl. brauche!
(Ich hab erst vor 2 Wochen mit VBA angefangen)

Ich hoffe du weißt nun was ich brauche! *gg*

Und ich würde mich freuen, wenn du mir weiterhelfen würdest!

Grüße Martin

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

startrek
Moderator
Architekt


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

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 25. Jul. 2005 22:42    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 ToniM 10 Unities + Antwort hilfreich

Hi Toni-Martin,

ehm, nur mal auf die Gefahr, dass du's überlesen hast,
nach allem was du nun noch geschrieben hast, und auf Axel's Nachhaken hin - kommste mit meinem 'stuff' nicht ein stück weiter?;-)

Gruss Nancy
--
"Karen has her own i, and she is not going to let Frank put his
data into it." (F. D. Boswell) 

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

ToniM
Mitglied
Rekrut


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

Beiträge: 17
Registriert: 14.07.2005

AutoCAD 2005

erstellt am: 26. Jul. 2005 07:01    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

Ja, danke! Es hat funktioniert!

Vielen Dank nochmal!

LG Martin

------------------
LG Martin

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