| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: VBA Keine Datenbank (759 / mal gelesen)
|
JotEs Mitglied Konstrukteur
Beiträge: 9 Registriert: 01.07.2021 Windows 7, Autocad Mechanical 2014
|
erstellt am: 01. Jul. 2021 12:31 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin neu hier. Ich habe in VBA kleines Makro geschreiben das eine Linie zeichnen soll (um die Befehle auszuprobieren und später weiter entwickeln). " Public Sub Simple_AddLine() Dim NewLine As AcadLine Dim StartPt As Variant Dim EndPt As Variant Dim Prompt As String Dim LastPt(2) As Double Do If IsEmpty(StartPt) = True Then Prompt = "Startpunkt wählen" StartPt = ThisDrawing.Utility.GetPoint(, Prompt) If IsEmpty(StartPt) = True Then Exit Sub LastPt(0) = StartPt(0) LastPt(1) = StartPt(1) LastPt(2) = StartPt(2) Else EndPt = Empty Prompt = "nächsten Punkt wählen" EndPt = ThisDrawing.Utility.GetPoint(StartPt, Prompt) If IsEmpty(EndPt) = True Then Exit Sub Set NewLine = ThisDrawing.ModelSpace.AddLine(LastPt, EndPt) LastPt(0) = EndPt(0) LastPt(1) = EndPt(1) LastPt(2) = EndPt(2) End If Loop End Sub " Alles läuft gut bis am Befehl "Set NewLine = ThisDrawing.ModelSpace.AddLine(LastPt, EndPt)" das Makro stürz ab mit der Meldung "Laufzeitfehler '-2145386390 (8020006a)': Keine Datenbank" Was kann ich tun. Helf mir bitte. Mit vielen Grüßen JotEs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
yamaha Mitglied Konstrukteur
Beiträge: 384 Registriert: 19.05.2004
|
erstellt am: 02. Jul. 2021 10:23 <-- editieren / zitieren --> Unities abgeben: Nur für JotEs
Hallo JotEs, ich kann Deinen Fehler nicht nachvollziehen. Bei mir läuft das Makro, bis zu dem Schritt in dem der Anwender keinen weiterer Punkt wählt. An diesem Schritt gibt es einen Laufzeitfehler. Das ist aber logisch. Sorry soweit, aber hilft ja vielleicht auch. ------------------ Gruß Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 02. Jul. 2021 10:26 <-- editieren / zitieren --> Unities abgeben: Nur für JotEs
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 02. Jul. 2021 14:05 <-- editieren / zitieren --> Unities abgeben: Nur für JotEs
Zitat: Original erstellt von JotEs: Alles läuft gut bis am Befehl "Set NewLine = ThisDrawing.ModelSpace.AddLine(LastPt, EndPt)" das Makro stürz ab mit der Meldung "Laufzeitfehler '-2145386390 (8020006a)': Keine Datenbank" Was kann ich tun. Helf mir bitte.
Hallo JotEs, Was ich so häufig schon geschrieben habe: Bau Dir eine Fehlerbehandlung ein! Fürs erste würde schon mal reichen: Code:
Prompt = "nächsten Punkt wählen" On Error Resume Next EndPt = ThisDrawing.Utility.GetPoint(LastPt, Prompt) If Err <> 0 Then If IsEmpty(EndPt) = True Then Exit Sub MsgBox "Fehler : " & Err.Number & vbCrLf & Err.Description Stop Err.Clear End If On Error GoTo 0 Set NewLine = ThisDrawing.ModelSpace.AddLine(LastPt, EndPt)
Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JotEs Mitglied Konstrukteur
Beiträge: 9 Registriert: 01.07.2021 Windows 7, Autocad Mechanical 2014
|
erstellt am: 02. Jul. 2021 20:47 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von cadffm: Wer nach der Fehlermeldung sucht wird auch fündig, leider nicht mit DER Lösung, aber einige Hinweise findet man schon denen man nachgehen kann.
Hi cadffm, Leider versthe ich deinen Hinweiss nicht. Kann es sein, dass Du die Antwort weißt, aber nicht verraten willst? Trotzdem danke und viele Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JotEs Mitglied Konstrukteur
Beiträge: 9 Registriert: 01.07.2021 Windows 7, Autocad Mechanical 2014
|
erstellt am: 02. Jul. 2021 20:54 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, Ich habe deinem Rat gefolgt, aber bei der Zeile "Set NewLine = ThisDrawing.ModelSpace.AddLine(LastPt, EndPt)" das Makro stürz ab, mit der Meldung "Laufzeitfehler '-2145386390 (8020006a)': Keine Datenbank" Was für eine Datenbank? Erstaunlich: Befehl "EndPt = ThisDrawing.Utility.GetPoint(StartPt, Prompt)" (auch ein Autocad-Befehl) geht durch und "Set NewLine = ThisDrawing.ModelSpace.AddLine(LastPt, EndPt)" nicht.Was ist da los? Ich wäre sehr dankbar für einen guten Tipp. Viele Grüße JotEs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 03. Jul. 2021 12:06 <-- editieren / zitieren --> Unities abgeben: Nur für JotEs
Hallo JotEs, Poste mal den kompletten Code der Sub, dann kann man das besser beurteilen. Wenn Du das wie angegeben übernommen hast und beim Befehl "EndPt = ThisDrawing.Utility.GetPoint(StartPt, Prompt)" ein Fehler auftritt wird ja durch das "On Error resume next" automatische die nächste Befehlszeile aufgerufen werden. Wenn dort dann nicht die Fehlerbehandlung kommt und im Falle eines Fehlers ein Programmabbruch, kann es natürlich zum Fehler bei der Linienerstellung kommen (EndPt nicht definiert) Kannst Du denn generell keine Linie erzeugen oder kommt der Fehler wenn Du das Programm beenden möchtest, also keinen "letzten Punkt" tippst? Grüße Klaus [edit] Dieser Code funktioniert bei mir einwandfrei:
Code:
Public Sub Simple_AddLine() Dim NewLine As AcadLine Dim StartPt As Variant Dim EndPt As Variant Dim Prompt As String Dim LastPt(2) As DoubleDo If IsEmpty(StartPt) = True Then Prompt = "Startpunkt wählen" StartPt = ThisDrawing.Utility.GetPoint(, Prompt) If IsEmpty(StartPt) = True Then Exit Sub LastPt(0) = StartPt(0) LastPt(1) = StartPt(1) LastPt(2) = StartPt(2) Else EndPt = Empty Prompt = "nächsten Punkt wählen" On Error Resume Next EndPt = ThisDrawing.Utility.GetPoint(LastPt, Prompt) If Err <> 0 Then If IsEmpty(EndPt) = True Then Exit Sub MsgBox "Fehler : " & Err.Number & vbCrLf & Err.Description Stop Err.Clear End If On Error GoTo 0 Set NewLine = ThisDrawing.ModelSpace.AddLine(LastPt, EndPt) LastPt(0) = EndPt(0) LastPt(1) = EndPt(1) LastPt(2) = EndPt(2) End If Loop End Sub
[Diese Nachricht wurde von KlaK am 03. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JotEs Mitglied Konstrukteur
Beiträge: 9 Registriert: 01.07.2021 Windows 7, Autocad Mechanical 2014
|
erstellt am: 03. Jul. 2021 17:14 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen also Klaus, ich habe das Makro wie Du geschrieben hast laufen lassen: 1. Erster Punkt - ohne Probleme, 2. ACAD Zeigt eine "GummiLinie" vom Startpunkt 3. Endpunkt - nach dem Click: Makro stürzt ab mit Felermeldung (siehe Bild_3) und in Debugger bleibt gelbunterlegt bei "Set NewLine..." stehen (wie Bild_4). Danach habe ich das Makro modifiziert so, das es nur 1 mal laufen soll und zwei MsgBox eingebaut um die Koordinaten des Start- und Endpunktes zu zeigen. Das lief ohne Probleme (Siehe Bild_1 und Bild_2). Danach die gleiche Geschichte: Endpunkt - nach dem Click: Makro zeigt die MsgBox und nach dem Click auf OK stürzt ab mit Felermeldung (siehe Bild_3) und in Debugger bleibt gelbunterlegt bei "Set NewLine..." stehen (wie Bild_4). Was konnte die Ursache sein? Liegt das am ACAD oder Windows? Fehlt mir vielleicht eine Datei, oder ist was kaputt? Ich kriege die Kriese Danke und ich hoffe auf Eure Hilfe Grüße JotEs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JotEs Mitglied Konstrukteur
Beiträge: 9 Registriert: 01.07.2021 Windows 7, Autocad Mechanical 2014
|
erstellt am: 03. Jul. 2021 17:17 <-- editieren / zitieren --> Unities abgeben:
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 03. Jul. 2021 19:45 <-- editieren / zitieren --> Unities abgeben: Nur für JotEs
Hallo, Sehr merkwürdig, ich hoffe ja nicht dass das am Mechanical liegt. Kannst Du mal einfach eine neue Zeichnung machen, neues VBA-Projekt und dann folgendes Beispiel laufen lassen. Code:
Sub Example_AddLine() ' This example adds a line in model space Dim lineObj As AcadLine Dim startPoint(0 To 2) As Double Dim endPoint(0 To 2) As Double ' Define the start and end points for the line startPoint(0) = 1#: startPoint(1) = 1#: startPoint(2) = 0# endPoint(0) = 5#: endPoint(1) = 5#: endPoint(2) = 0# ' Create the line in model space Set lineObj = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) ZoomAll End Sub
Möglicherweise versteht die 2014 Version die Punktdefinition Variant/Double nicht und erwartet wirklich ein Doublearray Grüße Klaus [Diese Nachricht wurde von KlaK am 03. Jul. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JotEs Mitglied Konstrukteur
Beiträge: 9 Registriert: 01.07.2021 Windows 7, Autocad Mechanical 2014
|
erstellt am: 04. Jul. 2021 12:08 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe das einfache Makro vom Klaus laufen lassen, leider mit dem gleichen Effekt: Absturz mit den Meldungen wie auf den Bildern Bild_3 und Bild_4 (siehe oben). Wer hat da eine Idee? Ich bin schon am verzweifeln. Eine "blöde" Frage: Wenn das Makro ohne Probleme folgende Befehle akzeptiert: Dim NewLine As AcadLine StartPt = ThisDrawing.Utility.GetPoint(, Prompt) EndPt = ThisDrawing.Utility.GetPoint(LastPt, Prompt) bedeutet das doch das die Verbindung zu AutoCAD existiert, oder? Wieso akzeptiert aber Set NewLine = ThisDrawing.ModelSpace.AddLine(LastPt, EndPt) nicht? Was Fehlt ihm? Schöne Grüße JotEs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 04. Jul. 2021 12:33 <-- editieren / zitieren --> Unities abgeben: Nur für JotEs
Hallo JotEs, Puh, jetzt wird es schwierig. Ich vermute mal Du hast keinen Supportvertrag (wegen 2014er Version). Das installierte Mechanical ist das eine 32- oder 64 Bit Version? Hast Du auch Office installiert? 32 oder 64 Bit? Evtl. hilft ja eine Reparaturinstallation. Kannst Du das Mechanical auch als reines Autocad starten? Gleiches Verhalten? Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 04. Jul. 2021 17:53 <-- editieren / zitieren --> Unities abgeben: Nur für JotEs
"Leider versthe ich deinen Hinweiss nicht. Kann es sein, dass Du die Antwort weißt, aber nicht verraten willst?" Nein, ich kenne das Problem und die Lösung nicht. Mein Hinweis war nur ein Hinweis darauf im www einige Posts zu der Fehlermeldung finden zu können, offenbar ist die Meldung aber nicht für nur ein Problem eindeutig, daher gibt es auch nicht DIE EINE Lösung. Der Hinweis sollte zum (weiteren) recherchieren ermutigen. Bei dem einen ging es zum Beispiel um eine Datei aus älteren Versionen, in einer neuen Datei klappte derselbe code. Leider habe ich mir nicht gemerkt um welche Datei es ging(cad? VBA? ?). Ich bin jetzt in Urlaub, und lasse die Seele baumeln. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JotEs Mitglied Konstrukteur
Beiträge: 9 Registriert: 01.07.2021 Windows 7, Autocad Mechanical 2014
|
erstellt am: 04. Jul. 2021 23:11 <-- editieren / zitieren --> Unities abgeben:
Hallo Klaus, ich hab den ganzen Sonntag im Internet gesucht und nichts brauchbares gefunden. Ich glaube ich werde alles manuell zeichnen und verzichte auf VBA Makros. Ich wollte eventuell etwas mit LISP versuchen, aber das kann ich nicht verstehen und ich finde auch keinen vernunftigen tutorial auf deutsch und "für dummis". Noch mal Danke Schöne Grüße JotEs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Ehrenmitglied V.I.P. h.c. 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 05. Jul. 2021 00:02 <-- editieren / zitieren --> Unities abgeben: Nur für JotEs
Lisp: Für nicht 'mal eben schnell' sondern ordentlich langsam von A-Z die Syntax & Co Autolisp.info Je besser die ganz einfachen elemtaren Dinge passen, desto weniger Ärger für alles was folgt. Wer VBA kann, der fängt vllt besser mit dem 2.Tutorial an, das ist "blau" und auch dort verlinkt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |