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/

Escopo e tempo de vida. Variáveis

Dúvidas sobre VB para AutoCAD...

Moderador: Moderadores

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

Escopo e tempo de vida. Variáveis

Mensagem por sidneyab » Sex 30 Jan 2009 1:06:22 pm

Olá,

Estou tentando escrever uma macro e tenho tomado uma verdadeira surra do VBA.

Não consigo fazer a variável ter escopo global na macro. No object explorer tenho o seguinte:

Autocad objects -> thisdrawing

Onde eu escrevi a rotina principal. Já tentei usar a variável com public var as double logo abaixo de option explicit e não funcionou. Continuando no object explorer:

Forms->userform1

Modules-> modulo 1 @ 4

Só consegui fazer funcionar declarando a variável em todas as partes do programa, mas creio que este não seja o melhor metodo.

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 6:20:22 pm

Sidney

Vou dar uma olhada mas acho que tem a ver com o DIM. Vou verificar. T+
hugopaulo
AutoLISP Não É LISP ==> VISUAL LISP não é Linguagem

Avatar do usuário
unVolt
Bronze 1/3
Bronze 1/3
Mensagens: 185
Registrado em: Dom 17 Dez 2006 11:00:00 pm
Localização: Jundiaí - SP

Mensagem por unVolt » Sex 30 Jan 2009 8:30:16 pm

Vc está declarando a variavel em um module/form e tentando acessar em outros?
Se for isso, vc precisa indicar o local de origem da variável. Por exemplo:

Module1:

Código: Selecionar todos

public var as integer
var = "teste"
Module2:

Código: Selecionar todos

msgbox module1.var
And I guess I just don't know
André William

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

Mensagem por hugopaulo » Sáb 31 Jan 2009 1:20:32 am

Sidney

O André resolveu. Só vou complementar com "coisinhas"

´ Antes dos Módulos - As variáveis aqui são globais
Public Num As Integer ' variável inteiro global
Public NomeArray(1 To 5) As String ' variável array global

' Declaração múltipla
Public Var1, Var2, Var3 As Integer ' Var1 e Var2 - variants, Var3 inteiro
'-------------------------------------------------------------------------------------
Módulo 1
Dim Texto as String
' a variável Texto é local
...
...
end

Módulo 2
Dim Num as Integer
' a variável Num é local
...
...
end

Tudo começa aqui. (Procedure = Sub (subrotina) / Function (função de retorno) / Property (propriedade)

Imagem

Pergunta: As variáveis a seguir são Públicas ou Privadas ?

Public Sub Abre()

' Abre um desenho
Dim dwgName As String
dwgName = "e:\autocad 2000\sample\campus.dwg" ' use o seu caminho (path)
If Dir(dwgName) <> "" Then
ThisDrawing.Application.Documents.Open dwgName
Else
MsgBox "File " & dwgName & " Não Existe."
End If
End Sub

Public Function Inicio(Ano As Integer) As Date

Dim Dia As Integer
Dim Ano As Date

AnoNovo = DateSerial(Ano, 1, 1)
Dia = (AnoNovo - 2) Mod 7 'Gera o índice da semana onde Segunda-feira é = 0

If Dia < 4 Then
Inicio = AnoNovo - Dia
Else
Inicio = AnoNovo - Dia + 7
End If

End Function

T+
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 10:03:11 pm

Mestre Hugo,


Se entendi bem, apesar dos procedimentos serem public todas as variaveis são privadas para os procedimentos a que pertencem pois, foi usado o DIM antes das mesmas.

Mesmo no caso da variável anonovo pois caso o DIM seja suprimido o VBA o coloca automaticamente na frente da variável no momento da execução do procedimento.

Estou correto???

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

Mensagem por hugopaulo » Seg 09 Fev 2009 11:50:09 pm

BINGO... Sidney.

Vc compreendeu realmente e nunca mais vai esquecer. Então está resolvido. Mais dúvidas ? Estamos aqui...T+
hugopaulo
AutoLISP Não É LISP ==> VISUAL LISP não é Linguagem

Responder