Produkt: AutoCAD 2002
Datum: 07.12.2001
Stáhnout VBA projekt (7 KByte)
Častou otázkou uživatelů je, jak lze do AutoCADu načíst hodnoty souřadnic bodů.
V tomto příkladu si ukážeme, jak pro řešení tohoto problému můžeme použít VBA.
V tabulce v MS Excelu máme ve sloupci hodnoty X a Y (pro testovací účely
použijeme hodnoty funkcí SIN a COS).

Pro to, abychom mohli v našem VBA programu pracovat s knihovnou objektů programu
MS Excel, musíme nejprve provést připojení knihovny EXCEL9.OLB. K tomu použijeme
volbu References v nabídce Tools:

V dialogu References vyhledáme knihovnu Microsoft Excel 9.0 Object Library.

Nyní můžeme v našem VBA kódu používat i objekty knihovny Excel a ukážeme si, jak se "napojíme" na spuštěnou instanci MS Excel:
Dim oExcel As Excel.Application
On Error Resume Next
Set oExcel = GetObject(, "Excel.Application")
If Err <> 0 Then
MsgBox "Došlo k chybě při získávání objektu Excel. Zkontrolujte, zda je spuštěna aplikace."
Exit Sub
End If
K ošetření chyb jsme opět použili výraz On Error Resume Next a tam, kde
očekáváme výskyt chyby, testujeme proměnnou Err. V našem případě by se např.
mohlo sát, že Excel nebude spuštěný a hodnota proměnné oExcel by tedy byla
prázdná (Nothing).
Podobně se pokusíme získat i objekt oSheet, který představuje aktivní
sešit (proměnná typu Worksheet).
Dim oSheet As Excel.Worksheet
Set oSheet = oExcel.ActiveSheet
If Err <> 0 Then
MsgBox "Došlo k chybě při získávání aktivní sešitu. Zkontrolujte, zda je otevřen sešit v MS Excel."
Exit Sub
End If
Souřadnice vykreslíme jako křivku, kterou je VBA repreznetována objektem AcadLWPolyline. Při vytváření křivky musíme zadat pole čísel, které reprezentuje hodnoty souřadnic X a Y. Velikost pole vypočteme tak, že od sebe odečteme koncový a počáteční řádek. Výsledek vynásobíme dvěma (dvě souřadnice - X a Y) a přičteme jedničku (pole je indexováno od nuly).
startRow = 3
endRow = 75
Dim arrPoints() As Double
ReDim arrPoints((endRow - startRow) * 2 + 1)
Ve smyčce budeme procházet buňky, číst jejich hodnoty a hodnotami plnit pole souřadnic. Křivku nakonec vykreslíme pomocí metody AddLightWeightPolyline.
For i = 0 To (endRow - startRow)
Dim oRange As Range
Set oRange = oSheet.Cells(i + startRow, columnX)
arrPoints(i * 2) = oRange.Value
Set oRange = oSheet.Cells(i + startRow, columnY)
arrPoints(i * 2 + 1) = oRange.Value
Next i
Dim oPolyline As AcadLWPolyline
Set oPolyline = ThisDrawing.ModelSpace.AddLightWeightPolyline(arrPoints)
If Err <> 0 Then
MsgBox "Došlo k chybě při vytváření křivky."
Exit Sub
End If
Výsledný kód funkce by vypadal následovně:
Subgraph()DimoExcelAsExcel.ApplicationOn Error Resume NextSetoExcel = GetObject(, "Excel.Application")IfErr <> 0ThenMsgBox"Došlo k chybě při získávání objektu Excel. Zkontrolujte, zda je spuštěna aplikace."Exit SubEnd IfDimoSheetAsExcel.WorksheetSetoSheet = oExcel.ActiveSheetIfErr <> 0ThenMsgBox"Došlo k chybě při získávání aktivní sešitu. Zkontrolujte, zda je otevřen sešit v MS Excel."Exit SubEnd IfstartRow = 3 endRow = 75 columnX = 1 columnY = 2DimarrPoints()As DoubleReDimarrPoints((endRow - startRow) * 2 + 1)Fori = 0To(endRow - startRow)DimoRangeAsRangeSetoRange = oSheet.Cells(i + startRow, columnX) arrPoints(i * 2) = oRange.ValueSetoRange = oSheet.Cells(i + startRow, columnY) arrPoints(i * 2 + 1) = oRange.ValueNextiDimoPolylineAsAcadLWPolylineSetoPolyline = ThisDrawing.ModelSpace.AddLightWeightPolyline(arrPoints)IfErr <> 0ThenMsgBox"Došlo k chybě při vytváření křivky."Exit SubEnd IfEnd Sub
Copyright © 2001 CAD Studio s.r.o.