Vytisknout stránku | Zavřít okno

Obsahové centrum

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=30337
Datum vytištění: 30.čvc.2026 v 14:39


Téma: Obsahové centrum
Odeslal: Radek Pícha
Předmět: Obsahové centrum
Datum odeslání: 08.dub.2020 v 13:25
Dobrý den.
Jak zjistím ve VBA umístění knihoven obsahového centra ? Jde mi o cestu:

Inventor -> Nástroje -> Možnosti aplikace -> karta Obsahové centrum -> Možnosti přístupu: Umístění knihoven

Zkoušel jsem GetAccessOption, ale bez úspěchu.
Děkuji



-------------
<font color=BLUE>Ing. Radek Pícha[/COLOR] (konstruktér)

http://www.itsbenda.cz" rel="nofollow - ITS BENDA s.r.o.



Odpovědi:
Odeslal: Vladimír Michl
Datum odeslání: 08.dub.2020 v 14:46
U mne funguje:

Sub GetCCloc()
 Dim CCloc As String
 Dim CC As ContentCenterOptions
 Set CC = ThisApplication.ContentCenterOptions
 CC.GetAccessOption ContentCenterAccessOptionEnum.kInventorDesktopAccess, CCloc
 MsgBox CCloc
End Sub


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Radek Pícha
Datum odeslání: 09.dub.2020 v 06:33
Super, funguje, děkuji.
Přitom jsem ovšem zjistil poněkud zvláštní skutečnost. Zkoušel jsem to samé, neustále jsem dostával chybu "Type mismatch", teď už vím proč:

Dim x, y As String
Dim CC As ContentCenterOptions
Set CC = ThisApplication.ContentCenterOptions
'toto je chyba:
CC.GetAccessOption ContentCenterAccessOptionEnum.kInventorDesktopAccess, x
'toto je správně:
CC.GetAccessOption ContentCenterAccessOptionEnum.kInventorDesktopAccess, y

Protože Dim x,y,z AS string vytvoří všechny vyjmenované proměnné kromě poslední jako Variant/Empty, ta poslední je String. Je to vidět v okně Locals. A i když provedu x="", bude proměnná x typu Variant/String. A příkaz GetAccessOption bazíruje na tom, aby proměnná do které vloží tu cestu byla čistě String, jinak hlásí chybu.

Existuje pro toto chování nějaké vysvětlení ? Nebo mám někde něco špatně...


-------------
<font color=BLUE>Ing. Radek Pícha[/COLOR] (konstruktér)

http://www.itsbenda.cz" rel="nofollow - ITS BENDA s.r.o.


Odeslal: Vladimír Michl
Datum odeslání: 09.dub.2020 v 07:27
Syntaxe příkazu Dim není "seznam a pak typ As", ale "seznam s možným individuálním nastavením jednotlivých typů - As". Viz (toto je sice pro VB.NET ale syntaxe je stejná):
https://docs.microsoft.com/cs-cz/dotnet/visual-basic/language-reference/statements/dim-statement" rel="nofollow - https://docs.microsoft.com/cs-cz/dotnet/visual-basic/language-reference/statements/dim-statement



-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Radek Pícha
Datum odeslání: 09.dub.2020 v 07:59
Takže to má být takto ?
Dim a As String, b As String, c As String
Ano, takto to opravdu funguje. Ale je to vopruz, to je snad první jazyk v kterém dělám a který to tak má Cry

Jenže právě podle toho článku to chápu opačně. Asi to platí pro VB, pro VBA to neplatí:

Pro každou proměnnou, kterou deklarujete, můžete určit různé typy dat pro různé proměnné pomocí samostatné klauzule As. Každá proměnná přebírá datový typ zadaný v první klauzuli As, který se objevil po jeho variablename část.

Dim a, b, c As Single, x, y As Double, i As Integer
' a, b, and c are all Single; x and y are both Double


-------------
<font color=BLUE>Ing. Radek Pícha[/COLOR] (konstruktér)

http://www.itsbenda.cz" rel="nofollow - ITS BENDA s.r.o.


Odeslal: Vladimír Michl
Datum odeslání: 09.dub.2020 v 10:29
Aha, já jsem dočetl jen do popisu syntaxe:

variablelist

Povinná hodnota. Seznam proměnných, které jsou deklarovány v tomto příkazu.

variable [ , variable ... ]

Každá variable má následující syntaxi a části:

variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]



Tak to jsem neodkázal na zrovna vhodný příklad, VBA to asi vyžaduje takto.


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


Odeslal: Radek Pícha
Datum odeslání: 09.dub.2020 v 10:59
Nevadí, v naprosté většině případů to funguje i tak. Pokud je někde problém, je třeba na to myslet a vyzkoušet čistou deklaraci proměnné.
Můj problém je vyřešen, děkuji. Navíc mám nový poznatek.


-------------
<font color=BLUE>Ing. Radek Pícha[/COLOR] (konstruktér)

http://www.itsbenda.cz" rel="nofollow - ITS BENDA s.r.o.



Vytisknout stránku | Zavřít okno