Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) me.controle.controlsource


Humm

Pergunta

bom, tenho 2 forms diferentes que usam o mesmo subform, porem nunca usam ao mesmo tempo.

então, dependendo de qual form tá abrindo o subform, eu quero que a fonte de controle de um determinado campo seja alterada.

para isso fiz a rotina:

Private Sub Form_Load()
    If CurrentProject.AllForms("CLI").IsLoaded Then
        Me.AD_BOX.ControlSource = "=SeImed(ÉNulo([TotalPG]) Ou [TotalPG]=0 Ou [TotalPG]=DPesquisa(""[VALOR_ORC]"";""CONS_VL_ORC_BY_OS_2"");"" "";""Faltam "" & Format(DPesquisa(""[VALOR_ORC]"";""CONS_VL_ORC_BY_OS_2"")-[TotalPG];""Moeda"") & "" para completar o pagamento!"")"
    ElseIf CurrentProject.AllForms("AGENDA").IsLoaded Then
        Me.AD_BOX.ControlSource = "=SeImed(ÉNulo([TotalPG]) Ou [TotalPG] = 0 Ou [TotalPG] = DPesquisa(""[VALOR_ORC]""; ""CONS_VL_ORC_BY_OS""); "" ""; ""Faltam "" & Format(DPesquisa(""[VALOR_ORC]""; ""CONS_VL_ORC_BY_OS"") - [TotalPG]; ""Moeda"") & "" para completar o pagamento!"")"
    Else
        Me.AD_BOX.ControlSource = ""
    End If
End Sub
mas ao abrir qualquer um dos dois forms, da erro de sintaxe ao definir o controlsource, ou seja, é como se houvesse erro na string que eu quero definir para o campo. agora o curioso é que se eu testo a string direto no controlsource do campo la do subform, sem passar pela rotina, funciona perfeitamente. tambem se eu definir uma string besta como:
Private Sub Form_Load()
    If CurrentProject.AllForms("CLI").IsLoaded Then
        Me.AD_BOX.ControlSource = "=""TESTE"""
    ElseIf CurrentProject.AllForms("AGENDA").IsLoaded Then
        Me.AD_BOX.ControlSource = "=""TESTE2"""
    Else
        Me.AD_BOX.ControlSource = ""
    End If
End Sub

tambem funciona normal.. então quero saber porque diretamente no form a string que quero funciona, mas atravez de rotina, não.

valeu

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

é um campo calculado comum, ou seja, caixa de texto não acoplada.

to achando que o problema pode estar nas aspas (quotes)

como a string contem quotes(") pode ser ai.. exemplo:

a string é -> ="TESTE"

Me.AD_BOX.ControlSource = " ="teste" "

vai dar erro, pois o vba vai entender que a segunda quote já está finalizando a primeira.. então, até onde me lembro, usa-se duas quotes quando se quer que ela não seja interpretada pelo vba.

Me.AD_BOX.ControlSource = " =""teste"" "

se eu fizer assim, funciona perfeito o exemplo. mas se eu usar a string mais complexa com seimed, etc e tal.. da erro quando tenta executar a rotina.. erro no momento em que a rotina tenta atribuir essa string à propriedade controlsource do controle. o erro diz:

erro 2434

a expressao que voce inseriu contem sintaxe invalida

lembrando que no vba, o depurador não vê erro de sintaxe na string.

existe outra maneira de tratamento de quotes no vba?

ou seja, quando se quer quotes fazendo parte da string, usa-se duas quotes seguidas, não é isso?

só pra constar, usando a sintaxe tanto em ingles como em portugues, da o mesmo erro. dpesquisa = dlookup, etc e tal

Editado por Humm
Link para o comentário
Compartilhar em outros sites

  • 0

funciona perfeitamente.

fiz uns testes pra tentar isolar o problema.. e descobri o seguinte..

sempre que o vba tentar atribuir para um .sourcecontrol atravez de rotina uma string que contenha a função seimed ou ifImed, vai dar esse erro.

eu tentei com ifImed bem simples, tipo.. =ifImed(1=1;"A";"B") e deu o mesmo erro.

até tentei fazer o seguinte.. criei um rotulo no form onde o caption dele é a string que quero e que funciona naturalmente se colocada manualmente no sourcecontrol da caixa de texto.

então mandei o vba:

me.controle.controlsource = me.rotulo.caption

deu erro mesmo assim..

tambem tentei antes declarar que se trata de uma string, mas nada resolve isso.

acabei clonando o subform e agora tenho dois subforms identicos onde a unica diferença entre os dois é o controlsource dessa caixa.. era isso que eu queria evitar.. duplicar forms so por causa de um detalhe.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...