Tenha uma nova experiência ao navegar no Fórum pelo computador de forma integrada ao portal principal. Acesse o seguinte link: https://www.autolisp.com.br/board/. Entretanto para dispositivos móveis recomendamos acessar este outro link: https://www.autolisp.com.br/forum/

O que está faltando?

Dúvidas sobre VB para AutoCAD...

Moderador: Moderadores

Avatar do usuário
sidneyab
Concreto
Concreto
Mensagens: 89
Registrado em: Seg 09 Mai 2005 12:00:00 am
Localização: Belo Horizonte

O que está faltando?

Mensagem por sidneyab » Qua 06 Ago 2008 9:52:27 pm

Oi,

Estou tentando desvendar os segredos do VBA for Excel e escrevi o seguinte código:

Sub loop4()
Do
If IsEmpty(ActiveCell) Then
ActiveCell.FormulaR1C1 = "=Média(RC[-2],RC[-1])"
End If
ActiveCell.Offset(1, 0).Select
Loop Until IsEmpty(ActiveCell.Offset(0, 1))
End Sub

O loop funciona direitinho, o código escreve a fórmula na céluda do jeito que tem que ser. Só que, o Excel não retorna o valor da fórmula no luga ele mostra o erro #nome? porem, quando eu clico na barra de edição e depois dou enter, sem editar nada, ele entende a fórmula e mostra o resultado.

O que eu tenho que ativar no Excel para fazer ele entender a fórmula estou com a versão 2007 em português.


Atenciosamente,


Sidney Alves Batista.

Avatar do usuário
laudemir
Prata 2/3
Prata 2/3
Mensagens: 532
Registrado em: Qui 29 Mar 2007 12:00:00 am
Contato:

Mensagem por laudemir » Qua 06 Ago 2008 11:52:02 pm

Tente colocar em Ingles

"=AVERAGE(RC[-2],RC[-1])"
é apenas um palpite pois não não manjo muito de VB

me parece que apesar de digitar na celula =MEDIA, o interpretador interno do VB, parece que intende somente como AVERAGE

sei la testa ai.
"As respostas dos problemas, geralmente são mais simples que pensamos"
[email protected]
Veja outros artigos http://lautolisp.blogspot.com/
Estou iniciando em blog, mas ja é um começo....

Avatar do usuário
sidneyab
Concreto
Concreto
Mensagens: 89
Registrado em: Seg 09 Mai 2005 12:00:00 am
Localização: Belo Horizonte

Mensagem por sidneyab » Qua 14 Jan 2009 10:12:19 pm

laudemir escreveu:Tente colocar em Ingles

"=AVERAGE(RC[-2],RC[-1])"
é apenas um palpite pois não não manjo muito de VB

me parece que apesar de digitar na celula =MEDIA, o interpretador interno do VB, parece que intende somente como AVERAGE

sei la testa ai.
E ai cara beleza?

Você estava certo funcionou.

Avatar do usuário
hugopaulo
Master
Master
Mensagens: 1873
Registrado em: Dom 29 Fev 2004 12:00:00 am

Mensagem por hugopaulo » Sex 30 Jan 2009 8:24:14 am

Voltei a esse tópico só para pequenos lembretes:

1. VB é Visual Basic - não tem nada a ver diretamente com AutoCAD (compilado - aplicação geral)

2.VBA for Access- não tem nada a ver com AutoCAD (Visual Basic for Applications - interpretado - para Access)

3. VBA for Excel - não tem nada a ver com VBA-AutoCAD (Visual Basic for Applications - interpretado - para Excel)

4. VBA for Word- não tem nada a ver com VBA-AutoCAD (Visual Basic for Applications - interpretado - para Word)

5. VBA for AutoCAD - não tem nada a ver com VBA-Access/Excel/Word (Visual Basic for Applications - interpretado - para AutoCAD)

Parece inconsitente mas não é.

a) Existem funções do VBA-Access/ Excel /Word que não funcionam no AutoCAD.

b) Existem funções do VBA-AutoCAD que não funcionam no VBA-Access/Excel/Word.

c) O que liga os quatro (AutoCAD/Access/ Excel/Word) é ODBC.

d) O que o Excel está fazendo aqui ? Este fórum é para Dúvidas do AutoCAD ou estou enganado ? :?: :oops: :mrgreen:

T+
hugopaulo
AutoLISP Não É LISP ==> VISUAL LISP não é Linguagem

Avatar do usuário
neyton
Master
Master
Mensagens: 1668
Registrado em: Qui 25 Dez 2003 11:00:00 pm
Contato:

Mensagem por neyton » Sex 30 Jan 2009 10:01:38 am

acho que o mais correto seria dizer que o que une os 4 são as interfaces COM, ou activex

por exemplo: podemos acessar as tais funções do cad que o excel nao "entende" apenas adicionando referencia ao autocad no VBA do excel ( autocadXXXX type library, etc )

o mesmo para o cad, no vba do cad fazemos referencia às funções do excel e usamos elas para manipular planilhas, etc

em fim...

corrijam se estiver errado...
como que usa o html daqui?
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!

Avatar do usuário
hugopaulo
Master
Master
Mensagens: 1873
Registrado em: Dom 29 Fev 2004 12:00:00 am

Mensagem por hugopaulo » Sex 30 Jan 2009 11:51:37 am

Não Neyton. Isso é categórico. O que une os 4 é ODBC - Open Data Base Conectivity (senão não tem sentido algum). O grifo é meu.

O Activex é API mas não quer dizer que a comunicação é instantânea de ambiente para ambiente. Há toda uma configuração prévia para isso (livros de George Omura e Ellen Filkenstein).

O Component Object Model (COM) originado de DDE - Dynamic Data Exchange, e depois DCOM está um tanto o quanto obsoleto e começou com OLE 1.0 (OLESVR.DLL/OLECLI.DLL) em 1990.

Hoje tudo isso está sendo substituido por Dot Net tb da Microsoft (que manda e desmanda no nosso mundo informatês).

O que eu quero dizer e afirmar, e parece que não foi muito bem entendido, é que o ActiveX não é panacéia que resolva através de uma aplicação resultados em outra. Vc pode sim, mandar uma informação através de uma BASE DE DADOS (ODBC) que vai interagir no ambiente da aplicação hospedeira de um VBA específico.

O VBA do AutoCAD não pode mesmo ser idêntico ao VBA do Excel mesmo porque um é da Autodesk o outro da Microsoft. São aplicações completamente díspares (basicamente os VBAs são semelhantes) embora a proprietária do "engine" VBA seja a Microsoft que criou o Visual Basic (descendente do Compilador Quick Basic que uso até hoje).

Sim o que acontece de fato é que tanto um quanto o outro usam APIs do Windows, afinal são "for Windows" - AutoCAD For Windows - tatata...

Reafirmando: existem ActiveXs que SÓ FUNCIONAM na aplicação hospedeira.

Gostaria de aprender como se ativa uma layer de um desenho do AutoCAD através do Excel sem informar à Base de Dados do Desenho (outra vez ODBC) e sem passar pela aplicação AutoCAD. Tabelas tudo bem pois o Excel é para isso. Agradeço sinceramente pois quero aprender de verdade. Mais uma para o meu caderninho.

Para encerrar Neyton. Não vou mudar minha postagem não para contrariar vc e outros que seguem a mesma tendência mas porque estudo a matéria há muito tempo e entendi perfeitamente as finalidades do contexto sobre ActiveX.

Agora se vc quer acreditar no conteúdo do que vc postou é um privilégio seu. Não o considero adequado. Nada pessoal.

Saudações!
hugopaulo
AutoLISP Não É LISP ==> VISUAL LISP não é Linguagem

Avatar do usuário
hugopaulo
Master
Master
Mensagens: 1873
Registrado em: Dom 29 Fev 2004 12:00:00 am

Redenção de Um Companheiro Prestativo

Mensagem por hugopaulo » Sáb 07 Fev 2009 12:34:08 am

Ao Neyton

É companheiro eu fiz a pergunta sobre selecionar uma "layer" através do Excel e caí na armadilha do esquecimento.:oops:

Tenho um programa (ARX) que desenha tubulações em 3D que eu considero bom (se quiser envio para vc embora sabendo q não é a sua praia) e está compilado em VLX.

A maioria das transferências de dados é através de planilhas XLS. Num fórum nos USA, que era o CAD Vault (não existe mais) alguém postou como ajustar variáveis de ambiente do AutoCAD via XLS e tornar layers correntes, mudar cor, etc, pelo VBA do Excel.

Só que não deixou um exemplo.Vou tentar desenvolver então uma rotina VBA Excel (creio q só roda no Excel) e coloco aqui. Se vc conseguir antes apenas vou olhar a postagem e não coloco nada a menos que sejam diferentes.

Por isso é q sempre leio posts antigos. De repente veio o estalo. Só não consegui ainda é dissociar a ligação ODBC da transferência de dados (como vc sugeriu) e o George Omura muito palidamente sugeriu que talvez pudesse.

Veja se consegue e dê um plá (ou seja desativar o ODBC e usar só a comunicação COM). Não é muito fácil mas talvez vc consiga.

Um abraço.
hugopaulo
AutoLISP Não É LISP ==> VISUAL LISP não é Linguagem

Avatar do usuário
neyton
Master
Master
Mensagens: 1668
Registrado em: Qui 25 Dez 2003 11:00:00 pm
Contato:

Mensagem por neyton » Dom 08 Fev 2009 2:37:23 pm

me perdi em algum lugar desses posts....

[quote=hugopaulo]Tenho um programa (ARX) que desenha tubulações em 3D que eu considero bom (se quiser envio para vc embora sabendo q não é a sua praia) e está compilado em VLX. [/quote]
impossivel

arx é feito em C/C++
vlx é lisp ( wathever, autolisp, visual lisp) compilado, bem...

pro autocad escrever qualquer coisa numa planilha excel, nao precisa odbc algum, apenas uma referencia à type library do mesmo ( função vlax-iport-type-library do visual lisp )... se for com lisp

o mesmo para o excel fazer algo no cad.. adicione a referencia ao cad ( autocad xx type library )
e pronto....

em ambos os casos a referencia é feita por interfaces COM

ah, e dizer que COM esta morrendo... bem.... o civil 3d so fornece API atravez de COM, nada de dotNET...

tanto que para usar metodos da API do civil 3d, é preciso chamar o cad :

Código: Selecionar todos

'no inicio do codigo VB.NET:
Imports AcadNET = Autodesk.AutoCAD.ApplicationServices.Application

'dentro de uma classe qualquer, chamo o autocad pela interface COM:
Public AcadCOM As AcadApplication = AcadNET.AcadApplication

'agora chamo a interface COM do civil 3d para trabalahr com surfaces, por exemplo:
Public LandCOM As IAeccApplication = AcadCOM.GetInterfaceObject("AeccXUiLand.AeccApplication.6.0")
como que usa o html daqui?
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!

Avatar do usuário
hugopaulo
Master
Master
Mensagens: 1873
Registrado em: Dom 29 Fev 2004 12:00:00 am

Mensagem por hugopaulo » Dom 08 Fev 2009 3:29:55 pm

Neyton

O programa é entregue em ARX e VLX. Não sei como é feito isso mas é assim. Não pode ser mudado. Tenho a impressão que o VLX verifica o ARX ou carrega ou usa...não sei..não fui eu quem fiz.

Quanto ao COM, embora o Civil 3D use, não fui eu quem disse que está acabando...foi o pessoal da Autodesk e da Microsoft. Parece que é para compatibilizar versões antigas. Fora isso como vc usaria Base de Dados através do COM ? Existe algum macete ?

COM foi muito usado na decada de 1990. Começou em 1993 e só foi divulgada em 1997. Quanto ao fato de ARX ser compilado em C++ e AutoLISP em VLX (Visual LISP não pode ser compilado) dentro de uma rotina LSP compilada em VLX vc pode chamar qualquer ARX correto (arxload) ?

No mais quanto ao COM realmente espera-se que seja substituido ou expandido pelo Dotnet da Microsoft. Não é colocação minha...só informação.

O COM - Component Object Model não é para trabalhar com Base de Dados só com OLE (talvez possa ajudar...eu não sei como...). COM implementa a forma de trabalhar com objetos permitindo que eles sejam usados fora do seu ambiente original em outros ambientes. A conversão é feita através da QueryInterface().

Espero que vc tenha mais algumas informações para nós.

Um abraço.
hugopaulo
AutoLISP Não É LISP ==> VISUAL LISP não é Linguagem

Avatar do usuário
sidneyab
Concreto
Concreto
Mensagens: 89
Registrado em: Seg 09 Mai 2005 12:00:00 am
Localização: Belo Horizonte

Mensagem por sidneyab » Seg 09 Fev 2009 9:56:09 pm

hugopaulo escreveu:Voltei a esse tópico só para pequenos lembretes:

1. VB é Visual Basic - não tem nada a ver diretamente com AutoCAD (compilado - aplicação geral)

2.VBA for Access- não tem nada a ver com AutoCAD (Visual Basic for Applications - interpretado - para Access)

3. VBA for Excel - não tem nada a ver com VBA-AutoCAD (Visual Basic for Applications - interpretado - para Excel)

4. VBA for Word- não tem nada a ver com VBA-AutoCAD (Visual Basic for Applications - interpretado - para Word)

5. VBA for AutoCAD - não tem nada a ver com VBA-Access/Excel/Word (Visual Basic for Applications - interpretado - para AutoCAD)

Parece inconsitente mas não é.

a) Existem funções do VBA-Access/ Excel /Word que não funcionam no AutoCAD.

b) Existem funções do VBA-AutoCAD que não funcionam no VBA-Access/Excel/Word.

c) O que liga os quatro (AutoCAD/Access/ Excel/Word) é ODBC.

d) O que o Excel está fazendo aqui ? Este fórum é para Dúvidas do AutoCAD ou estou enganado ? :?: :oops: :mrgreen:

T+
Mestre Hugo,

Os seguintes motivos me levaram a postar este tópico:

1º Toda literatura que encontrei sobre VBA para AutoCAD era uma kk;

2º Encontrei muita coisa boa para excel, e como estou começando com esta linguagem agora, porque não começar pelo excel.

3º Se eu conseguir aplicar bem está linguagem no excel e depois no autocad as possibilades são quase que infinitas, já pude imaginar uma lista de materiais de tubulação na qual bastasse eu digitar o código no Autocad e depois o excel, baseado neste código monta a lista para mim. Seria um verdadeiro avanço para qualquer que trabalha com ambos os tipos de documentos.


E por fim, mas não menos importante, este é o melhor lugar que conheço para tirar este tipo de dúvida.


Mas se a pergunta ofendeu por favor me perdoem. Garanto que isso não vai se repetir.

Responder