Zobrazit plnou verzi příspěvku: Prepojenie VBA Acad - Excel

predcis
15.04.2008, 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.

pavelstyl
16.04.2008, 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
[CODE]
dim sh as WorkSheet
set sh=ZositExcel.Sheet(1)
prom=sh.Cells(radek,sloupec)[/CODE]
 

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.
[CODE]
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 = NothingEnd Sub[/CODE]
 
Pavel Štyl
 

predcis
18.04.2008, 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ý.