Registrujte se na 22. ročník konference CADfórum 2025 - 30.9. Zámek Valeč.
Přes 119.000 registrovaných u nás, celkem 1.097.000 registrovaných (CZ+EN), přes 53.000 CAD/BIM bloků.
Vyzkoušejte nový přesný Inženýrský kalkulátor a aktualizovaný Generátor čarových kódů.
Diskuzní fórum, poradna
?CAD diskuze, rady, výměna zkušeností

Fórum nenahrazuje technický support firmy ARKANCE (CAD Studio) - přímá podpora pro zákazníky funguje na helpdesk.arkance-systems.cz
|
Odpovědět ![]() |
archiv |
Autor | |
SELM ![]() Diskutér ![]() Přihlášen: 25.lis.2005 Stav: Offline Bodů: 59 |
![]() Zasláno: 04.led.2007 v 16:04 |
Dostal jsem výkres, kde jsou stejné bloky uloženy vždy pod jiným ménem. Třeba jeden blok je tam 63x pod 63 jmény.
Jak ve VBA nahradit blok blokem.
Vím že bůžu projít všechny bloky, dokážu i jednotlivé bloky přejmenovat, potíž je v tom, že není možné přejmenovat na stéjné jméno více bloků (typů bloků) tím ho přepsat.
Jak na to?
![]() |
|
![]() |
|
musil ![]() Zasloužilý člen ![]() Přihlášen: 03.srp.2005 Lokalita: ČR (VY) Používám: Cad 2002LT EN Stav: Offline Bodů: 162 |
![]() |
Zdravim selectoval bych body a posléze kopiroval jeden blok.
Ale vo VBA neporadim.
|
|
![]() |
|
Vladimír Michl ![]() Profil člena
Odeslat soukromou zprávu
Najít příspěvky člena
Navštívit stránky člena
Přidat do seznamu známých
Moderátor ![]() ![]() ARKANCE Přihlášen: 09.zář.2004 Lokalita: ČR (JČ) Používám: Implementujeme řešení Autodesk Stav: Offline Bodů: 21951 |
![]() |
Přejmenovat asi ne, ale nahradit bloky můžete pomocí BLOCKREPLACE - viz:
|
|
![]() |
|
dazky ![]() Nováček ![]() Přihlášen: 29.lis.2004 Stav: Offline Bodů: 5 |
![]() |
predpokladam, nechcete automaticky porovnavat
jednotlive bloky mezi sebou, a hledat ktere jsou si podobne
a nemate problem vytvorit seznam jak jednolive
bloky nahrazovat ve vykrese (Model, Layouts) vyhledejte objekty
BlockReference
a nahradte je dle potreby asi takto, vycistenim
vykresu se pak zbavite nepotrebnych definic
Public Sub XXX()
Dim BlockRefObj As AcadEntity For Each BlockRefObj In ThisDrawing.ModelSpace If BlockRefObj.ObjectName = "AcDbBlockReference" Then If BlockRefObj.Name = "63a" Then BlockRefObj.Name = "63" If BlockRefObj.Name = "63b" Then BlockRefObj.Name = "63" End If Next End Sub |
|
![]() |
|
Chop ![]() Diskutér ![]() Přihlášen: 13.srp.2005 Lokalita: Czech Republic Stav: Offline Bodů: 64 |
![]() |
Zdravím, tak s tímhle jsem se taky setkal při podkladech z DGN jsem obdržel soubor se spoustou graficky stejných bloků s názvy např. strom$1, strom$2 až strom$1536.
V tomto případě nezabere ani BLOCKREPLACE protože umožní vybrat jen jeden název bloku pro nahrazení a dělat to 1536x …
Vytvořit ručně seznam pro nahrazení tolika bloků asi taky není moc příjemné.
Takže tady je makro pro nahrazení mnoha různých bloků blokem jedním.
Není úplně ošetřeno na chyby a tak postupujte takto:
1. spusťte makro
2. při běhu na obrazovce vyberte bloky, které chcete nahradit (výběr ukončete enter nebo PTM)
3. vyberte blok, kterým chcete vybrané bloky nahradit
Sub Blok2Bloky()
'provede nahrazení vybraných bloků novým blokem Dim vybránblok As Boolean Dim aktivobj As AcadEntity Dim blok2 As AcadEntity Dim Vklbod(0 To 2) As Double Dim pomset As AcadSelectionSet Dim aktset As AcadSelectionSet Dim bodík As Variant For Each pomset In ThisDrawing.SelectionSets
If pomset.Name = "ss1" Then pomset.Delete 'čistě pro jistotu, pokud po nějakém zhroucení ještě výběr ss1 existuje Exit For End If Next pomset Set pomset = ThisDrawing.SelectionSets.Add("ss1") 'čistý výběr ThisDrawing.Utility.Prompt "Vyberte bloky pro nahrazení" Dim intType(0) As Integer Dim varData(0) As Variant intType(0) = 0 varData(0) = "INSERT" pomset.SelectOnScreen intType, varData ThisDrawing.Utility.Prompt "" vybránblok = False Do Until vybránblok ThisDrawing.Utility.GetEntity blok2, bodík, "Vyberte blok pro nahrazení vybraných bloků. Blok nesmí být součástí výběru pro nahrazení." If StrComp(blok2.ObjectName, "AcDbBlockReference", vbTextCompare) = 0 Then vybránblok = True Else MsgBox "Vybraný objekt není blok! Zkuste výběr znovu", vbOKOnly vybránblok = False End If Loop For Each aktivobj In pomset On Error Resume Next
Select Case aktivobj.ObjectName Case "AcDbBlockReference" Dim br1 As AcadBlockReference Dim Novyblk As AcadBlockReference Set br1 = aktivobj Set Novyblk = ThisDrawing.ModelSpace.InsertBlock(br1.InsertionPoint, blok2.Name, 1, 1, 1, br1.Rotation) 'na původní pozici a se stejnou rotací vloží nový blok br1.Delete 'po nahrazení bloku smazat původní blok End Select
Next aktivobj ThisDrawing.SelectionSets("ss1").Delete End Sub Upravil Chop - 05.led.2007 v 06:36 |
|
Civil 2007
|
|
![]() |
|
Vladimír Michl ![]() Profil člena
Odeslat soukromou zprávu
Najít příspěvky člena
Navštívit stránky člena
Přidat do seznamu známých
Moderátor ![]() ![]() ARKANCE Přihlášen: 09.zář.2004 Lokalita: ČR (JČ) Používám: Implementujeme řešení Autodesk Stav: Offline Bodů: 21951 |
![]() |
To je určitě užitečná funkce - jen pozor, neřeší řadu speciálních případů, ke kterým může běžně dojít (zamčené hladiny, vnořené bloky, atd.). Ty jsou právě ošetřeny v BLOCKREPLACE - ten lze spustit i řádkově (-BLOCKREPLACE) a také vybírat bloky ukázáním nebo jej zavolat ve smyčce se seznamem bloků.
|
|
![]() |
|
topocad ![]() Zasloužilý člen ![]() Přihlášen: 01.říj.2004 Lokalita: Czech Republic Používám: AutoCAD/Civil3D 2007-23 Stav: Offline Bodů: 113 |
![]() |
jak udělat seznam, resp. smyčku pro seznam více bloků pro nahrazení jedním blokem
Máme převedené DGN a v něm blok 6.702 a jeho "klony" 6.702_10, ...202 atd. Abychom nemuseli nahrazovat blok po bloku |
|
![]() |
Pro technickou podporu CAD
kontaktujte Helpdesk
Odpovědět ![]() |
|
Přejít na fórum | Oprávnění fóra ![]() Nemůžete vytvářet nová témata v tomto fóru Nemůžete odpovídat na témata v tomto fóru Nemůžete vymazávat vaše příspěvky v tomto fóru Nemůžete upravovat vaše příspěvky v tomto fóru Nemůžete vytvářet ankety v tomto fóru Nemůžete hlasovat v anketách v tomto fóru |
Stránka byla vygenerována za 0,208 sekund.