FastFiber

Tekenen vanuit Exel

Gestart door Jacobusje, vr 29 01 2021, 22:39:59

Vorige topic - Volgende topic

Jacobusje

Goedenavond,

Heb een oude hobby van stal gehaald.
Met waarden uit Excel tekenen in Auto-cad.

Ik loop ergens tegenaan wat ik toen niet op kon/wilde lossen.

Bijgevoegd bestand bevat een macro die lijnen zet in Auto-cad met waarden uit het 2e tabblad.
Dat heeft altijd goed gewerkt en werkt nu ook nog zolang alle waarden maar afrond op hele cijfers.
En eigenlijk wil ook lijnen tekenen met cijfers achter de komma.

Kan iemand mij helpen hoe ik dit op kan lossen?
Wellicht moet ik de code in VBA aanpassen....

Vast bedankt voor het meedenken
VrGr JieBie

EddyBeerke

Begin eerst eens met deze regel boven aan je code:
Option Explicit

Hierdoor wordt je gedwongen om je vars te benoemen, bv:
Dim commando as String
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Jacobusje

Dag Eddy,

Als ik "Option Explicit" bovenaan mijn code zet loopt hij vast bij KanaalNr van de Sub Rollaag en krijg de volgende melding:
Een variabele is niet gedefinieerd.

Deze melding krijg ik ook als ik
"Option Explicit
Dim commando As String"
Bovenaan de code zet.

Ook als ik "Dim commando As String" bij Sub lijn en bij Sub maten zet.

Waarschijnlijk komt het nogal precies waar de bepaalde codes staan.
Maar ik beheers dit niet genoeg om dat te bevatten  :?

Waar zou de code "Dim commando As String" precies moeten staan?

bart

ik heb niet veel kaas gegeten van vba
maar autocad lust geen komma in een cijfer en voor zover ik weet is het ook niet mogelijk om dat in te stellen

toe ik nog veel tekende en ook het nodige vanuit excel werkte met autocad had ik mijn landinstellingen aangepast tot een punt als decimaalteken
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

EddyBeerke

Citaat van: Jacobusje op wo 03 02 2021, 22:45:12
Dag Eddy,

Als ik "Option Explicit" bovenaan mijn code zet loopt hij vast bij KanaalNr van de Sub Rollaag en krijg de volgende melding:
Een variabele is niet gedefinieerd.

Deze melding krijg ik ook als ik
"Option Explicit
Dim commando As String"
Bovenaan de code zet.

Ook als ik "Dim commando As String" bij Sub lijn en bij Sub maten zet.

Waarschijnlijk komt het nogal precies waar de bepaalde codes staan.
Maar ik beheers dit niet genoeg om dat te bevatten  :?

Waar zou de code "Dim commando As String" precies moeten staan?
De code "Dim commando As String" is een voorbeeld.

Met de code "Option Explicit" verplicht je jezelf om de vars vooraf in je sub te definieeren.
Dan wet je wat er in een var kan komen en sluipen er minder fouten in het coderen.
Zo weet je bv dat bij een "Dim int As Integer" altijd een heel getal komt zonder decimalen.
Bij "Dim commando As String" is er dus altijd sprake van een string -> letter, woord of zin.

Dim Punt(2) As Double
Heeft een soort verdieping dus eigelijk drie vars in één:
Punt(0), Punt(1) en Punt(2) allemaal van het type Double.
Dit kun je bv gebruiken als je een punt opvraagt in AutoCAD, alleen dan geef je geen nummer op.
Hier een simpel voorbeeld:

Option Explicit

Sub GeefPunt()
Dim Punt() As Double ' dit had ook zo kunnen staan: Dim Punt() As Variant -> Voor alles te gebruiken
' Vraag een punt op in het active acad window
Punt() = ThisDrawing.Utility.GetPoint(, "Geef punt op: ")

' Toon de opgevraagde waardes
Debug.Print "X: " & Punt(0)
Debug.Print "Y: " & Punt(1)
Debug.Print "Z: " & Punt(2)
End Sub


Door je code op die manier aan te passen kun je ook makkelijker weten wat de code doet.
Neemt niet weg dat opmerkingen (gedefinieerd voorafgaande met een ') de code nóg beter leesbaarder maken zoals in het voorbeeld.
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Jacobusje

Eddy,

Ik weet niet of ik het goed begrijp....
Bart zegt dat Acad geen komma's lust.
Dat zou voor mijn gevoel betekenen dat die komma's omgezet moeten worden in punten. (met vba-code)

Als ik jou code goed interpreteer dan stel je daarmee de eigenschap van de output vast....?

Maar daarmee veranderd de input toch niet? (komma's in Excel)

Of zit ik te moeilijk te denken of op de verkeerde weg?

EddyBeerke

Citaat van: Jacobusje op wo 10 02 2021, 22:38:53
Eddy,

Ik weet niet of ik het goed begrijp....
Bart zegt dat Acad geen komma's lust.
Dat zou voor mijn gevoel betekenen dat die komma's omgezet moeten worden in punten. (met vba-code)

Als ik jou code goed interpreteer dan stel je daarmee de eigenschap van de output vast....?

Maar daarmee veranderd de input toch niet? (komma's in Excel)

Of zit ik te moeilijk te denken of op de verkeerde weg?
Ik heb allen een verbetervoorstel gedaan voor de leesbaarheid voor de code.
Gewoon een tip als je verder gaat met coderen. Je zou dat ook kunnen weglaten (wat mij aleen onverstandig lijkt).
De uitdaging met punten en comma's kun je met het volgendet stukje code misschien oplossen:


Dim CV As String, CT As String, S As String, P As Long, Obj As AcadEntity
  ' Waar moet naar gezocht worden
  CV = ","
  ' Wat moet daarvoor in de plaats
  CT = "."
  ' Er wordt van een Obj (een MText of een Text) de TextString opgevraagd
  S = Obj.TextString
    ' Als het een ander object betreft dan is er een error, zo niet ga dan verder
    If Not Err Then
      ' zoek de CV in S, vervolgens check of gevonden (P), dan vervangen door CT
      P = InStr(S, CV): If P <> 0 Then Mid(S, P, 1) = CT
      Obj.TextString = S
    Else
      Err.Clear
    End If


De aanpassing die je moet doen hier is het getal dat je opvraagt in var S zetten i.p.v. S = Obj.TextString
Dan wordt er van een "," een "." gemaakt

Zoals je ziet zijn alle vars gedeclareerd wat een vereiste is als je "Option Explicit" gebruikt.
Lees dit ook eens door voor de voordelen wat geld voor Excel-VBA is voor alle VBA dus ook voor AutoCAD-VBA:
https://wellsr.com/vba/excel/vba-option-explicit/
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

cadtools@gmail.com