CADsite

  • ma 01 03 2021, 23:06:27
  • Welkom, gast
Log in of registreer jezelf.

Login met gebruikersnaam, wachtwoord en sessielengte
Geavanceerd zoeken  

Nieuws:

Pagina's: [1]   Omlaag

Auteur Topic: Tekenen vanuit Exel  (gelezen 801 keer)

Jacobusje

  • forum starter
  • *
  • Offline Offline
  • Berichten: 3
    • Bekijk profiel
Tekenen vanuit Exel
« Gepost op: vr 29 01 2021, 22:39:59 »

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
Gelogd

EddyBeerke

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 2415
  • 1d CADSITE.be niet bezoeken = 1 dag niet geleefd!
    • Bekijk profiel
    • Mijn site
Re: Tekenen vanuit Exel
« Reactie #1 Gepost op: wo 03 02 2021, 08:41:36 »

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
Gelogd

Jacobusje

  • forum starter
  • *
  • Offline Offline
  • Berichten: 3
    • Bekijk profiel
Re: Tekenen vanuit Exel
« Reactie #2 Gepost 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?
Gelogd

bart

  • Forum medewerker
  • forumverslaafde
  • *****
  • Offline Offline
  • Berichten: 2081
    • Bekijk profiel
Re: Tekenen vanuit Exel
« Reactie #3 Gepost op: do 04 02 2021, 11:47:31 »

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
Gelogd
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

EddyBeerke

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 2415
  • 1d CADSITE.be niet bezoeken = 1 dag niet geleefd!
    • Bekijk profiel
    • Mijn site
Re: Tekenen vanuit Exel
« Reactie #4 Gepost op: di 09 02 2021, 10:02: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 DoubleHeeft 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.
Gelogd

Jacobusje

  • forum starter
  • *
  • Offline Offline
  • Berichten: 3
    • Bekijk profiel
Re: Tekenen vanuit Exel
« Reactie #5 Gepost 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?
Gelogd

EddyBeerke

  • forumverslaafde
  • ******
  • Offline Offline
  • Berichten: 2415
  • 1d CADSITE.be niet bezoeken = 1 dag niet geleefd!
    • Bekijk profiel
    • Mijn site
Re: Tekenen vanuit Exel
« Reactie #6 Gepost op: do 11 02 2021, 09:12:27 »

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/
Gelogd

cadtools@gmail.com

  • vaste forumklant
  • *****
  • Offline Offline
  • Berichten: 318
  • BIM dreamer
    • Bekijk profiel
Re: Tekenen vanuit Exel
« Reactie #7 Gepost op: do 11 02 2021, 10:24:18 »

Kijk ook even naar deze video.
https://www.youtube.com/watch?v=J0kZR6ptwG4
Gelogd
Pagina's: [1]   Omhoog