• Este fórum é a tradução automática de www.cad3d.it/forum1 - a comunidade italiana de design. Vários termos não foram traduzidos corretamente.

Selecione blocos e atributos de transformação em texto

bolo

Guest
Eu tenho alguns vba rudiment para o escritório, é a primeira vez que eu uso vba para autocad.

Meu objetivo é cerca de cem arquivos .dwg:

1. selecionar blocos
2. explodir atributos e transformá-los em texto (command "explode atributos ao texto" contido na ferramenta expressa

para passar todos 100 dwg Eu encontrei uma rotina, para o resto eu me encontro em problemas, se alguém me recomenda algum comando seria muito útil.

Obrigado!
 
Última edição:
Mas essa folha de excel serve para imprimir, não é?
Então eu deveria mudar o código para fazer o que eu preciso para mim?
ou perdi alguma coisa?

obrigado cmq para a resposta;)
 
com o botão amarelo (selecionar arquivo) selecionar todo o dwg para processar e são inseridos na coluna a.

na coluna de inserção, uma por linha, os comandos que devem executar autocad e, em seguida, colocados na célula imediatamente abaixo do último comando dado.

botão azul (criar arquivo de script)


veja um exemplo em Isto é o que debate.

Avisa-nos.
 
sobre o problema de processar vários arquivos diferentes eu teria resolvido por um .dvb encontrado Por favor. (é o penúltimo...) que entra em revisão muitos dwg e processá-los...

Meu problema é agora selecionar certos blocos filtrando talvez pelo nome do bloco, e extrair atributos, transformando-os em texto (command "explode atributos ao texto" contido na ferramenta expressa)

também usando a folha de excel eu não sei como fazer...
 
sobre o problema de processar vários arquivos diferentes eu teria resolvido por um .dvb encontrado Por favor. (é o penúltimo...) que entra em revisão muitos dwg e processá-los...

Meu problema é agora selecionar certos blocos filtrando talvez pelo nome do bloco, e extrair atributos, transformando-os em texto (command "explode atributos ao texto" contido na ferramenta expressa)

também usando a folha de excel eu não sei como fazer...
se não fornull(thisdrawing.selectionsets.item("element2") então
set sset2 = thisdrawing.selectionsets.item("element2")
sset2.delete
terminar se


set sset2 = thisdrawing.selectionsets.add("element2")
dim filtertype(1) como inteiro
dim filterdata(1) como variante
filtertype(0) = 0
filterdata(0) = "inserir"
tipo de filtro(1) = 2
filterdata(1) = "Nome_bloqueio"

sset2.select acselectionsetall, , filtertype, filterdata

e até agora você criar uma seleção com os blocos desse projeto com esse nome.

Agora, se tiveres a certeza que tens o expresso, a coisa é simples com o comando "enviado" que podes mudar para a linha de comando.
Thisdrawing.sendcommand ("burst" & vbcr & "p" & vbcr & vbcr)onde "p" indica anterior, uma vez que a seleção anterior já havia filtrado objetos.

outro método... um pouco mais trabalhoso é criar um array com valores de atributos e armazenar sua localização xy, e então usar este array para reescrever texto nos mesmos locais com as mesmas propriedades. Isto é um pouco mais complicado, mas viável.
 
lendário!

muito gentil. .

agora eu olho calmamente e então eu vou relatar se o objetivo foi alcançado ou não!!!

Tenha um bom dia!
 
Dá-me erro na primeira linha...

se não fornull(thisdrawing.selectionsets.item("element2") então

Diz "chave não encontrada"... Estava a pensar exactamente o que é?

o propósito do primeiro parágrafo de código e desmarcar quaisquer seleções presentes?
 
Dá-me erro na primeira linha...

se não fornull(thisdrawing.selectionsets.item("element2") então

Diz "chave não encontrada"... Estava a pensar exactamente o que é?

o propósito do primeiro parágrafo de código e desmarcar quaisquer seleções presentes?
desculpar as definições que eu tinha omitido

dim sset2 como acadselectionset
dim element2 como objeto

Este é o objetivo do primeiro parágrafo é verificar se há objetos no sset2 e possivelmente esvaziá-lo.
 
A primeira linha sempre me dá o mesmo erro... Eu também tentei levantar as citações, e nesse caso ele diz "não combinar tipo". .

Peço desculpa se faço perguntas estúpidas... Mas não sei qual é o peixe. .
 
A primeira linha sempre me dá o mesmo erro... Eu também tentei levantar as citações, e nesse caso ele diz "não combinar tipo". .

Peço desculpa se faço perguntas estúpidas... Mas não sei qual é o peixe. .
Digite o código para que eu veja se eu posso corrigi-lo
 
Dá-me erro na primeira linha...

se não fornull(thisdrawing.selectionsets.item("element2") então

Diz "chave não encontrada"... Estava a pensar exactamente o que é?

o propósito do primeiro parágrafo de código e desmarcar quaisquer seleções presentes?
além das declarações:

dim sset2 como acadselectionset
dim element2 como objeto
Aggingi:
em resumo de erro em seguidase não fornull(thisdrawing.selectionsets.item("element2") então
...
...
...
.

ciao
 
na primeira rodada funciona, abre e salva o dwg corretamente!!!
para o segundo vem este erro:

erro de execução '-21474148 (80010108)':
erro de automação
o objeto invocado desconectado dos clientes correspondentes.

Medo...
 
na primeira rodada funciona, abre e salva o dwg corretamente!!!
para o segundo vem este erro:

erro de execução '-21474148 (80010108)':
erro de automação
o objeto invocado desconectado dos clientes correspondentes.

Medo...
Então... então é difícil entender se você não colocar o código, mas na minha opinião a seleção não é esvaziada no fechamento do arquivo e ir ao carrinho para pescar um objeto que fisicamente não está mais lá.

cmq esse erro infelizmente ao usar vba sai muitas vezes e nem sempre por uma razão só... e é difícil de rastrear.

Se você colocar o código, talvez eu possa dar uma olhada nele... Mas se me puserem em duas filas, é difícil entender... cmq an on error resume next vai semrpe foi, mas baipassi apenas dos problemas que na verdade existem...
 
... cmq an on error resume next vai semrpe foi, mas baipassi apenas dos problemas que realmente existem...
esatto...

O que fazer?

"se não fornull(thisdrawing.selectionsets.item("element2") então"

si potrebbe fare:

dim y como inteiro
dim setname como string

setname = "element2"

para y = 0 a thisdrawing.selectionsets.count - 1
se thisdrawing.selectionsets.item(y).name = setname então
thisdrawing.selectionsets.item(y). excluir
saída para
terminar se
Próximo e

set sset2 = thisdrawing.selectionsets.add("element2")
....
...
...
...

qualche riga di codice in piu' ma molto efficace

cosi' facendo (volento) si potrebbe eliminare l' on error currículo next

ovviamente bisogna aver sotto mano l'intero codice per verificare che non vi siano altre "inesattezze"
- Sim.
 
Óptimo!

Funciona perfeitamente... se alguém pode interessar o código ou o arquivo de código diretamente!

Obrigado a todos!!

:finger:
 
per chi fosse interessato dallo spunto di bolo ho creato la procedura degli express "explode atributo to text" in vba... praticamente fa la stessa cosa, ma non sir avere gli express caricati per farla funzionare.

permette però di visualizzare o meno gli attributi invisili una volta convertiti em testo.

público sub explode_att_text()
dim sset2 como acadselectionset
dim blocco como acadblockreference
dim sset3 como acadselectionset
dim attributo as acadentity
dim vlabel(0 a 100) como variante
dim vtext(0 a 100) como variante

dim kwordlist como string
kwordlist = "s n"
thisdrawing.utility.initializeuserinput 1, kwordlist

estedrawing.utility.prompt vblf & vblf

dim retornatring como string
retornatring = thisdrawing.utility.getkeyword("visualizzare attributi nascosti? (s)(n): ")

em resumo de erro em seguida

se não fornull(thisdrawing.selectionsets.item("blocco") então
set sset2 = thisdrawiang.selectionsets.item("blocco")
sset2.delete
terminar se

set sset2 = thisdrawing.selectionsets.add("blocco")

dim filtertype(0) como inteiro
dim filterdata(0) como variante

filtertype(0) = 0
filterdata(0) = "inserir"
Tipo de filtro(1) = 2
'filtro de dados(1) = "numvan"

sset2.select acselectionsetall, , , filtertype, filterdata

para cada blocco no sset2
se blocco. temattributs então
dim array1 como variante
array1 = blocco.getattributes
para i = lbound (array1) para ubound (array1)
vlabel(i) = array1(i).tagstring
vtext(i) = array1(i).textstring
debug.print (vtext(i))
Próximo eu

Blocco.explode
Blocco. excluir


em resumo de erro em seguida

se não fornull(thisdrawing.selectionsets.item("attributo") então
set sset3 = thisdrawiang.selectionsets.item("atributo")
sset3.delete
terminar se

set sset3 = thisdrawing.selectionsets.add("atributo")

dim filtertype1(0) como inteiro
dim filterdata1(0) como variante

filtertype1(0) = 0
filterdata1(0) = "attdef"

sset3.select acselectionsetall, , , filtertype1, filterdata1

se retornatring = ", então retornatring = "s"

para cada atributo em sset3

se ucase (returnstring) = "n" então
se attributo.invisible = true então attributo. excluir
terminar se
para i = lbound (array1) para ubound (array1)
se attributo.tagstring = vlabel(i) então
atributo.tagstring = vtext(i)
terminar se
Próximo eu

em seguida

terminar se
sset3.delete
próximo bloco
sset2.delete
end sub
 

Estatísticas do fórum

Tópicos
58,521
Mensagens
499,056
Membros
104,110
Último membro
ChristianR

Membros online

Nenhum membro online agora.
Voltar
Topo