Beste
ik heb een probleempje bij het uitvoeren van de intersectwith methode.
Ik zoek dus de snijpunten van de cirkels waarvan ik de gegevens haal uit een excelwerkblad
Op het internet gevonden dunkt me dat er een probleem is met deze methode
kan iemand mij helpen
dit is mijn code (ik denk dat er niet zoveel mis, edoch kan ik niet verder)
alvast bedankt
Public Sub testje()
Dim exa As Excel.Application
Dim exwb As Excel.Workbook
On Error Resume Next
Set exa = GetObject(, "excel.application")
Set exwb = exa.Workbooks.Open("F:\Werkblad 1.xlsm")
If Err.Number <> 0 Then
Err.Clear
Set exa = CreateObject("excel.application")
Set exwb = exa.Workbooks.Open("F:\Werkblad 1.xlsm")
End If
Dim bpoint1(0 To 2) As Double
Dim bpoint2(0 To 2) As Double
Dim position(0 To 2) As Double
Dim distance1 As Double
Dim distance2 As Double
bpoint1(0) = exwb.Worksheets("ReadPosition").Cells(5, 2).Value
bpoint1(1) = exwb.Worksheets("ReadPosition").Cells(5, 3).Value
bpoint1(2) = exwb.Worksheets("ReadPosition").Cells(5, 4).Value
bpoint2(0) = exwb.Worksheets("ReadPosition").Cells(6, 2).Value
bpoint2(1) = exwb.Worksheets("ReadPosition").Cells(6, 3).Value
bpoint2(2) = exwb.Worksheets("ReadPosition").Cells(6, 4).Value
distance1 = exwb.Worksheets("ReadPosition").Cells(5, 5).Value
distance2 = exwb.Worksheets("ReadPosition").Cells(6, 5).Value
Dim circle1 As AcadCircle
Dim circle2 As AcadCircle
Set circle1 = ThisDrawing.ModelSpace.AddCircle(bpoint1, distance1)
Set circle2 = ThisDrawing.ModelSpace.AddCircle(bpoint2, distance2)
ZoomAll
Dim intPoints As Variant
intPoints = circle1.IntersectWith(circle2, acExtendNonde)
Dim i As Integer, j As Integer, k As Integer
Dim str As String
If VarType(intPoints) <> vbEmpty Then
For i = LBound(intPoints) To UBound(intPoints)
exwb.Worksheets("ReadPosition").Cells(3 + k, 2).Value = intPoints(j)
exwb.Worksheets("ReadPosition").Cells(3 + k, 3).Value = intPoints(j + 1)
exwb.Worksheets("ReadPosition").Cells(3 + k, 2).Value = Worksheets("ReadPosition").Cells(3 + k, 6).Value
exwb.Worksheets("ReadPosition").Cells(3 + k, 3).Value = Worksheets("ReadPosition").Cells(3 + k, 7).Value
i = i + 2
j = j + 3
k = k + 1
Next
End If
End Sub
Beste Pamper,
Hoezo? :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:
1) Staat bovenstaande tekst in een VBA project?
2) Heb je bij Tools->References de Excel library geladen bijv.: Microsoft Excel 12.0 Object Library
3) Is je Excelbestand: F:\Werkblad 1.xlsm
4) Heeft dit bestand een blad: ReadPosition
5) Heeft het blad ReadPosition de layout van het onderstaande plaatje?
Met vriendelijke groet, HofCAD CSI.
sterk, maar bij mij wil dit om de een of andere manier niet lukken
dus dat is balen met de pet op
Citaat van: Pamper op ma 21 03 2011, 19:26:16
sterk, maar bij mij wil dit om de een of andere manier niet lukken
dus dat is balen met de pet op
Loop je de executie ook af met de functietoets F8?
En kijk je dan ook naar de waarden?
Worden de cirkels ook niet getekend?
Met vriendelijke groet, HofCAD CSI.
de cirkels worden zonder probleem getekend
het probleem ligt in de zone
Dim intPoints As Variant
intPoints = circle1.IntersectWith(circle2, acExtendNonde)
bijgevolg krijg ik een Ubound(intPoints) van -1
dus moet er ergens iets onbekends zijn, maar aangezien hij toch de cirkels tekent ...
ik weet het niet
ik ben bang dat ze niet mee upgeload zijn
Citaat van: Pamper op ma 21 03 2011, 20:08:14
ik ben bang dat ze niet mee upgeload zijn
Beste Pamper,
Probeer eens mijn project "MijnWerkblad.dvb" en mijn Excel bestand "MijnWerkblad.xls"
en zet deze in c:\
Met vriendelijke groet, HofCAD CSI.
PS1 Het beste is om Excel en AutoCAD naast elkaar op het scherm te zetten,
omdat er in AutoCAD een MsgBox verschijnt met de snijpunten.
PS2 http://www.scribd.com/doc/7242667/Autocad-Excel-Vba-Tutorial
Het frustrerende is dat jouw code bijna gelijk is de mijne
maar bij mij wil hij niets in die intpoints steken, bijgevolg wordt de stap voor het uitschrijven overgelaten
dus hij heeft problemen met de volgende lijn
intPoints = circle1.IntersectWith(circle2, acExtendNone)
als ik het jouwe laat runnen, doet ie het perfect.
heel raar
alvast bedankt voor de moeite
Beste Pamper,
Ik denk niet dat het probleem in onderstaande regel zit:
intPoints = circle1.IntersectWith(circle2, acExtendNone)
Wat wil je met deze twee regels:
exwb.Worksheets("ReadPosition").Cells(3 + k, 2).Value = Worksheets("ReadPosition").Cells(3 + k, 6).Value
exwb.Worksheets("ReadPosition").Cells(3 + k, 3).Value = Worksheets("ReadPosition").Cells(3 + k, 7).Value
Met vriendelijke groet, HofCAD CSI.
PS Kijk eens naar de groene tekst in PamperTest.dvb en je ziet slechts 3 afwijkingen.
Loopt PamperTest.dvb bij jouw ook zonder problemen?
PamperTest.zip met PamperTest.dvb en C:\Werkblad 1.xlsm
Ja inderdaad die laatste 2 regels zijn niet nodig, maar dat had te maken met afrondingen,
dus die regels zijn al weg
het blijft het zelfde probleem, hij wil die intersection niet nemen
ik werk met autocad 2011 en office 2010, misschien heeft het daar iets mee te maken
Door het feit dat er niets in die intpoints komt te zitten, slaat hij die if lus over en dus schrijft hij niets uit
Citaat van: Pamper op di 22 03 2011, 19:03:32
Ja inderdaad die laatste 2 regels zijn niet nodig, maar dat had te maken met afrondingen,
dus die regels zijn al weg
het blijft het zelfde probleem, hij wil die intersection niet nemen
ik werk met autocad 2011 en office 2010, misschien heeft het daar iets mee te maken
Door het feit dat er niets in die intpoints komt te zitten, slaat hij die if lus over en dus schrijft hij niets uit
Beste Pamper,
Die twee regels geven bij mij ook problemen.
Als je wilt afonden dan doe je dat toch met de functie: Round(expression [,numdecimalplaces])
Zo dat je bij een decimaal krijgt:
exwb.Worksheets("ReadPosition").Cells(3 + k, 2).Value = Round(intPoints(j), 1)
exwb.Worksheets("ReadPosition").Cells(3 + k, 3).Value = Round(intPoints(j + 1), 1)
Ik wil wel eens je project (*.dvb) en je Excel file (*.xlsm) eens zien.
Kun je die AUB plaatsen.
Ik ga deze dan testen met AutoCAD 2010 en Office 2010.
Met vriendelijke groet, HofCAD CSI
PS Met PamperTest.dvb en C:\Werkblad 1.xlsm uit PamperTest.zip heb ik
in AutoCAD 2010 en Office 2010 geen problemen.
Gelieve niet te letten op de VBA-code in excel; ik ben daar mee bezig
ik apprecieer allesinds de moeite die je doet
als je natuurlijk een andere manier weet om een stelsel te laten oplossen in vba, dan mag je dat ook altijd zeggen
de bedoeling is om je positie in een assenstelsel in te lezen aan de hand van 2 afstanden naar 2 gekende punten.
Citaat van: Pamper op wo 23 03 2011, 16:18:48
als je natuurlijk een andere manier weet om een stelsel te laten oplossen in vba, dan mag je dat ook altijd zeggen
de bedoeling is om je positie in een assenstelsel in te lezen aan de hand van 2 afstanden naar 2 gekende punten.
Beste Pamper,
Volgens mij, is je idee goed. :vreegoe:
Je Excel waarden voor de regel
intPoints = circle1.IntersectWith(circle2, acExtendNone)
zijn niet goed :nigoe:, omdat de
Z-waarden verschillend zijn.
Als de
Z-waarden verschillend zijn, dan zijn er ook geen snijpunten. :lol: :lol:
Kijk ook maar in de tekening via het commando LINE en de Object Snap op INTersection.
Met vriendelijke groet, HofCAD CSI.
De wonderen zijn de wereld nog niet uit !
Dank je wel, het werkt nu idd perfect :)
Citaat van: Pamper op wo 23 03 2011, 18:40:10
De wonderen zijn de wereld nog niet uit !
Dank je wel, het werkt nu idd perfect :)
Beste Pamper,
De wonderen, of de slordigheden. :lol: :lol: :lol:
Met vriendelijke groet, HofCAD CSI.
PS: Zie mijn plaatje voor de Z-waarde bepaling.
bedankt, maar die zit er ondertussen al in geprogrammeerd
ik zit nu met een volgend probleem
maar kzal eerst zelf nog wat zoeken
kan je doordat je een macro in autocad geopend hebt daarna verder gaan met je originele ?
want dat wil hij bij ook niet doen, maar opnieuw kben nog ant prutsen eraan