Prepojenie VBA Acad - Excel
Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=6346
Datum vytištění: 13.kvě.2026 v 16:51
Téma: Prepojenie VBA Acad - Excel
Odeslal: predcis
Předmět: Prepojenie VBA Acad - Excel
Datum odeslání: 15.dub.2008 v 16:34
Dobry den,
zacal som rozmyslat nad jednym programcekom, ktory by z excelu nacitaval data a podla nich by kreslil veci do autocadu. Zatial len testujem ciastkove ulohy a rozmyslam ako na vec.
Zatial som dokazal spustit z autocadu excelovske makro, problem je vsak v tom, ze sa mi nedari "najst" alebo "preniest" premenne z excelackeho makra do acadovskeho makra.
Neviete mi prosim poradit, kde v objektovej skladbe sa nachadzaju globalne premenne (ak vobec) alebo inu fintu ako na to? Jedine co ma napadlo, je vyuzit nejaky externy textovy subor, do ktoreho by som zapisal vysledok excelovskeho makra a nacital ho do acadu, ale taketo riesenie sa mi zda tazkopadne.
Uvadzam priklad :
makro excel :
Public Hodnota As String
Public Sub pokus()
forr.Show
MsgBox Hodnota 'toto zobrazi spravny vysledok
End Sub
formular forr :
obsahuje jedno tlacitko a jedno textove pole (ma nazov hhh)
Private Sub CommandButton1_Click()
Hodnota = hhh.Value
Unload Me
End Sub
makro v acade :
Public Sub PokusSexcelom()
Dim Excelik As Object
Dim Subor As String
Dim Adresar As String
Dim ZositExcel As Workbook
Set Excelik = CreateObject("Excel.Application")
Excelik.Visible = True
Adresar = "d:\"
Subor = "makro.xls"
Set ZositExcel = Excelik.Workbooks.Add(Adresar & subor)
Excelik.Run "pokus"
MsgBox Excelik.hodnota 'tuto je problem
ZositExcel.Close
End Sub
Chcel by som sa opytat, ze ako sa dostanem ku globalnej premennej Hodnota vo vnutri acadovskeho makra. Pretoze prikaz MsgBox Excelik.hodnota zobrazuje prazdnu hodnotu.
myslim, ze C-cko pozna nieco ako extern, ale vo VBA som to nenasiel.
Dakujem za kazdy napad a radu !
Lubomir Placek
P.S. Este by som sa opytal, ma VBA ekvivalent k C-ckovym prikazom continue a ++ (trochu mi chybaju) ?
Este raz vdaka.
|
Odpovědi:
Odeslal: pavelstyl
Datum odeslání: 16.dub.2008 v 15:03
|
Dobrý den,
trošku mi uniká smysl toho čeho se snažíte dosáhnout.
Jestli tomu dobře rozumím, tak vy spustíte autocadovské makro, které spustí excelovské makro a z toho excelovského makra chcete získat hodnoty proměnných do toho autocadovského makra.
Návrh řešení 1:
upravit to excelovské makro tak, aby výsledek výpočtu uložil do nějakých buňek a z autocadoského makra ty hodnoty přečíst
dim sh as WorkSheet
set sh=ZositExcel.Sheet(1)
prom=sh.Cells(radek,sloupec) |
Návrh řešení 2:
přesunout autocadovské makro do excelu a nebo excelovské do autocadu
Když budou makra v jedné aplikaci, tak ten přenos hodnot bude jednodušší
Nevím jestli jsem ten dotaz pochopil dobře. Zkuste nějak blíže specifikovat, co ta makra mají dělat.
Jestli vám to pomůže, přikládám excelovské makro, které přenese hodnoty vybraných buňek do AutoCADu.
Private Sub ToACAD_Click() Dim acad As AcadApplication Dim dwg As AcadDocument Dim txt_point(0 To 2) As Double Dim r As Integer Dim s As Integer On Error Resume Next txt_point(0) = 0 txt_point(1) = 0 txt_point(2) = 0 Err.Clear Set acad = GetObject(, "AutoCAD.Application.16.2") If Err Then Err.Clear
Call MsgBox("AutoCAD Mechanical 2006 není spuštìn", vbCritical) Exit Sub End If Set dwg = acad.ActiveDocument
For r = Selection.Row To Selection.Row + Selection.Rows.Count - 1 For s = Selection.Column To Selection.Column + Selection.Columns.Count - 1 txt_point(0) = s * 25 txt_point(1) = -r * 10 Call dwg.ModelSpace.AddText(Cells(r, s), txt_point, "5") Next s Next r
Set dwg = Nothing Set acad = Nothing End Sub
|
Pavel Štyl
|
Odeslal: predcis
Datum odeslání: 18.dub.2008 v 09:51
Ďakujem za usmernenie,
mojím cieľom je načítať tabuľku z excelu (výkaz) a preniesť ju do autocadu, nie ako OLE objekt, ale ako autocadovské entity s tým, aby sa zapamätali vzorce, t.j. že ak by som potreboval upraviť výkaz, tak si celý blok (alebo acad tabuľku - túto novinku autocadu som ešte podrobne nepreskúmal) prenesiem do excelu aj so vzorcami. Takže ma čakajú ešte experimenty s setXData a getXData
Každopádne pojdem na to tým druhým spôsobom, že makro pre export do acadu naprogramujem v exceli, čím bude prenos dát bezproblémový.
|
|