Criar uma DIM para ...
 
Notifications
Clear all

Criar uma DIM para formulario escolhido

18 Posts
2 Usuários
0 Reactions
3,789 Visualizações
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

tenho o seguinte codigo abaixo, onde Caixa1 é um formulario. Porem tenho ainda os formularios Caixa2, Caixa3, Caixa4 e Caixa5. Para cada formulario desses utilizei a propriedade ShowModal = False.
Meus caixas 1 a 5 funcionam como um Comander. ou seja posso realizar e atender ate 5 clientes ao mesmo tempo.
Para isso em cada Caixa de 1 a 5, eu criei 5 botoes de comando que ao clicado chama cada caixa especifico sem fechar os outros.

Estando em qualquer formulario dos caixas de 1 a 5, para processar a venda eu chamo obrigatoriamente outro formulario de nome XPagamento2, pois este serve a todos os caixas de 1 a 5, onde escolho a forma de pagamento e ao processar, joga as informacoes nas Caption e Values do caixa ativo. Note que abaixo esta Caixa2 como sendo a referencia do caixa.

Minha pergunta é :

Como eu faco para criar uma DIm em que o Caixa a ser usado no comando irá depender do que estiver dentro de uma TextBox ?

Tentei usar isso :

Dim Ativo As String
Ativo = XPagamento.caixa.Value ' caixa é uma textbox do formulario Xpagamento, pois nos formularios Caixa 1 a 5 eu possuo uma TextBox ao qual esta fixado "Caixa1" para o formulario Caixa1, "Caixa2"para o formulario Caixa2, e assim sucessivamente. Pois assim dentro do Formulario XPagamento2, na TextBox Caixa.Value , ira aparecer conforme o caixa ativo.

Sendo assim, ao usar a DIM acima da erro, Se , Ativo = XPagamento.caixa.Value onde esta o erro ???

Se eu por assim por exemplo nao da erro:

Caixa2.Forma_Pag.Caption = Myoption

Private Sub btnOK1_Click()
    Application.ScreenUpdating = 0
Dim Valor As String
Dim Opt As String
Dim Myoption As String

  If Opt1.Value = True Then 'Dinheiro
  Myoption = "DINHEIRO"
  Troco.Show
  If TextBox3.Value <> "" Then
  Caixa2.Label_2.Caption = Format(TextBox3.Value, "R$ #,##0.00")
  End If
  
  GoTo Segue
End If
  If Opt2.Value = True Then 'Deposito
  Myoption = "DEPÓSITO"
    If TextBox3.Value <> "" Then
  Caixa2.Label_2.Caption = Format(TextBox3.Value, "R$ #,##0.00")
  End If
  GoTo Segue
End If
  If Opt3.Value = True Then  'Pendencia
  Myoption = "PENDÊNCIA"
    If TextBox3.Value <> "" Then
  Caixa2.Label_2.Caption = Format(TextBox3.Value, "R$ #,##0.00")
  End If
  GoTo Segue
End If
  If Opt4.Value = True Then  'Dinheiro + Debito
  Myoption = "DINHEIRO + DÉBITO"
  Caixa2.Label_3.Caption = TextBox15.Value
  Caixa2.Label_4.Caption = TextBox13.Value

  Caixa2.Label_9.Caption = TextBox8.Value * Plan34.Range("I11").Value
  GoTo Segue
End If
  If Opt5.Value = True Then  'Dinheiro + Cartao 1X
  Myoption = "DINHEIRO + CARTÃO 1x"
  Caixa2.Label_3.Caption = TextBox15.Value
    Caixa2.Label_4.Caption = TextBox13.Value

  Caixa2.Label_9.Caption = TextBox8.Value * Plan34.Range("I11").Value
  GoTo Segue
End If
  If Opt6.Value = True Then  'Dinheiro + Cartao 2x
  Myoption = "DINHEIRO + CARTÃO 2x"
  Caixa2.Label_3.Caption = TextBox15.Value
    Caixa2.Label_4.Caption = TextBox13.Value

   Caixa2.Label_9.Caption = TextBox8.Value * Plan34.Range("I11").Value
  GoTo Segue
End If
  If Opt7.Value = True Then  'Dinheiro + Cartao 3x
  Myoption = "DINHEIRO + CARTÃO 3x"
  Caixa2.Label_3.Caption = TextBox15.Value
    Caixa2.Label_4.Caption = TextBox13.Value
      Caixa2.Label_9.Caption = TextBox7.Value
  Caixa2.Label_9.Caption = TextBox8.Value * Plan34.Range("I11").Value
  GoTo Segue
End If
  If Opt8.Value = True Then   'Debito
  Myoption = "DÉBITO"
  Caixa2.Label_3.Caption = Format(TextBox8.Value, "R$ #,##0.00")
  Caixa2.Label_9.Caption = TextBox8.Value * Plan34.Range("H11").Value
  
'  End If
GoTo Segue
End If
  If Opt9.Value = True Then  'Credito 1x
  Myoption = "CRÉDITO 1x"
 '   If TextBox3.Value <> "" Then
  Caixa2.Label_2.Caption = Format(TextBox3.Value, "R$ #,##0.00")
  Caixa2.Label_9.Caption = TextBox8.Value * Plan34.Range("I11").Value
  'End If
  GoTo Segue
End If
  If Opt10.Value = True Then  'Credito 2x
  Myoption = "CRÉDITO 2x"
'    If TextBox3.Value <> "" Then
  Caixa2.Label_2.Caption = Format(TextBox3.Value, "R$ #,##0.00")
  Caixa2.Label_9.Caption = TextBox8.Value * Plan34.Range("I11").Value
  
  'End If
  GoTo Segue
End If
  If Opt11.Value = True Then  'Credito 3X
  Myoption = "CRÉDITO 3x"
 '   If TextBox3.Value <> "" Then
  Caixa2.Label_2.Caption = Format(TextBox3.Value, "R$ #,##0.00")
  Caixa2.Label_9.Caption = TextBox8.Value * Plan34.Range("I11").Value
  
  'End If
  GoTo Segue
End If

'If Opt4.Value = True Or Opt5.Value = True Or Opt6.Value = Ture Or Opt7.Value = True Then
'If TextBox16.Value = "" Then
Mensagem4.Show
Exit Sub
'End If
'End If

If TextBox17 <> "" Then
GoTo Segue
End If

If Myoption = "" Then
Mensagem1.Show

Exit Sub
End If

Troco.Show
Exit Sub

Segue:

Caixa2.Forma_Pag.Caption = Myoption
Caixa2.PAGAMENTO.Caption = "PROCESSAR A VENDA"
Caixa2.PAGAMENTO.BackColor = &HC000&
Caixa2.PAGAMENTO.ForeColor = &HFFFFFF

If Myoption = "PENDÊNCIA" Then
Caixa2.Total = ""
End If
Caixa2.Total.Value = TextBox8.Value



'Caixa2.Label_6 = Format((Caixa2.Total.Value - Caixa2.Label_9.Caption) - Caixa2.Label_8.Caption, "R$ #,##0.00")

'---------------------------------------------------------------------

Caixa2.Label_1.Caption = TextBox1.Value


Unload Me

    Application.ScreenUpdating = 1
End Sub
 
Postado : 11/01/2017 8:28 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

por exemplo quero fazer com que essa linha:

If Opt1.Value = True Then 'Dinheiro
Myoption = "DINHEIRO"
Troco.Show
If TextBox3.Value <> "" Then
Caixa2.Label_2.Caption = Format(TextBox3.Value, "R$ #,##0.00")
End If

possa se manifestar como sendo referencia ao Caixa1, Caixa2, Caixa3, Caixa4 ou Caixa5, conforme o caixa que estiver ativo.

Como disse uso 5 caixas identicos que funcionam como uma forma de Comander. Assim posso exercer ate 5 vendas a 5 clientes diferentes usando a propriedade ShowModal = False.

Para isso preciso por algo assim:

Dim Ativo As String
Ativo = XPagamento2.caixa.Value ' onde a textbox caixa podera ser caixa1, caixa2, caixa3 ..., conforme o caixa que estiver ativo.

Grato

Andre

 
Postado : 11/01/2017 8:39 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

Ola, alguem pode me ajudar ?

sempre que posto aqui é porque ja bati bem e recorro a vcs, muitas das vezes eu acabo resolvendo, mas esta joguei a toalha de novo.

Dim Ativo As String
Ativo = XPagamento2.caixa.Value

Da erro por nao reconhecer "Ativo "

onde errie ? pois Ativo = é o que esta dentro da TextBox "Caixa"no formulario XPAgamento.

Grato

 
Postado : 12/01/2017 7:34 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

Ola continuo em desespero aqui. Preciso somente saber como criar uma variavel para o comando abaixo, quero que a variavel seja para o formulario caixa2. Pois assim poderei usar o mesmo comando para os formalarios ce caixa1 a caixa5.

Se fosse uma planilha dai consigo, bastaria criar uma variavel Dim e pronto, mas com formulario não esyou conseguindo.

Repetindo quero que

Dim ativo as string
Ativo = textbox1.value ' onde no textbox estara escrito o nome do caixa a ser usado, caixa1, caixa2 ....

Caixa2.Label_2.Caption = Format(TextBox3.Value, "R$ #,##0.00")

Me ajudem

Andre

 
Postado : 14/01/2017 8:23 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

Boa Noite
podem me ajudar?

Se eu fizer uma macro pra trabalhar numa planilha o comando abaixo funciona.

Dim nome As String
nome = Range("A2").

Assim toda vez que aciono a macro ela vai obedecer o "nome"

entao , Sheets(nome).Select, funcionaria

Mas se eu fizer este procedimento entre formularios, dai nao funciona, porque ?

XPagamento2.Caixa.Value = "Caixa1"

Quero por assim :

Dim nome As String
nome= caixa1.TextBox1.value 'onde textbox1 esta escrito o nome do formulario que serta usado

nome.Caixa.Value = "Caixa1"

 
Postado : 16/01/2017 6:20 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Muita explicação e nenhum modelo, achei confuso, mas pelo que entendi você está trabalhando com varios formulários e para Referenciar os Controles tem de iniciar pelo nome do userform + o nome definido do Controel e não simplesmente pelo controle, por exemplo :

Ativo = textbox1.value, deveria ser :

Ativo = UserForm1.TextBox1.Value troque UserForm1 pelo nome do formulário que diz estar ativo.

Outra suposição seria, quando diz que está em um Caixa e chama o formulário XPagamento2, provavelmente é através de um Botão, então na rotina que usa para abrir o outro formulário, definir a Variável referente ao controle deste formulário.
Espero que tenha entendido, pesquise sobre Declaração de Variáveis entre vários UserForms e poderá entender melhor.

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/01/2017 6:31 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Procure manter o foco no tópico aberto em Formulários, evite abrir novo tópico referente ao mesmo assunto.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 16/01/2017 6:37 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

Ola Coutinho, vc escreveu:

Ativo = textbox1.value, deveria ser :

Ativo = UserForm1.TextBox1.Value troque UserForm1 pelo nome do formulário que diz estar ativo.

ai que ta o problema, todos os caixas sao identicos no visual e nos comandos, sendo assim cada caixa 1 a 5 existe a TextBox1 e nela esta escrito o nome do formulario.
Formulario Caixa 1 tem a a textBox1 e nela vai escrito "Caixa1"
Formulario Caixa 2 tem a a textBox1 e nela vai escrito "Caixa2" e assim por diante.

Deixei a propriedade de todos os caixas sendo ShowModal =False, dai como sabe posso abrir varios formularios um sobre o outro.
Como todos os formularios caixas sao iguais , neles tenho o Botao Forma de Pagamento. este possui comandos e tb chama outro formulario de nome Empresa. Neste eu escolho qual das minhas empresas farei a venda. Apos escolhida a empresa, e chamado o formulario XPagamehto, este e onde escolho a forma de pagamento , se cartao, debito ou dinheiro. Apos escolhido a forma de pagamento, dai ao precionar o botao Processar, os dados sao processados no caixa em que executei inicialmente . Digamos que eu esteja efetuando 3 vendas ao mesmo tempo. Se estou no caixa 2 ao precionar a forma de pagamento , este ao final dos comando retornara ao caixa 2 e nao ao caixa 1 ou 3. Por isso tenho que criar a variavel, pois neste momento estarao abertos 3 caixas por estar usando a propriedade ShowModal = False, entendeu ? Dai eu fiz a variavel DIm Ativo As String, mas nao ta dando certo.

Outra forma de resolver isso seria eu criar 5 formaularios pagamentos, 5 formularios empresa, 1 pra cada caixa. Por isso eu preciso a variavel.

so o que preciso saber é como devo proceder estando dentro o formulario XPagamento como jogar as informacoes dentro do caixa que estiver ativo, pois lembro que posso estar com 2 ou mais caixas abertos e que todos os caixas sao identicos alterando apenas seu nome, caixa 1, caixa2, caixa3...

 
Postado : 16/01/2017 7:19 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

Veja o erro que da ao criar uma variavel

veja que coloquei somente um Ativo no comando, referente a escolha em dibheiro, pra provoicar o erro e vc ve! abaixo esta caixa2, e assim nao tem problema, mas tambem so posso referenciar o caixa 2. Mas como o formulario XPagamento podera ser usado a qualquer um dos caixa, ta ai o motivo de ter a variavel.

 
Postado : 16/01/2017 7:33 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

Mais telas

 
Postado : 16/01/2017 7:35 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

ou seja .

Um dos caixas 1 a 5, chama o formulario Empresa1, este chama XPagamento, se dinheiro,chama o formulario Troco, ao dar ok, volta e continua executar a Macro XPagamento, e grava os dados no Caixa Ativo e entao retorna ao caixa ativo. ou seja , o caixa que deu o processo.

Se 2 ou mais caixas estiverem abertos, entao ai existe a necessidade da Variavel DIm, para a macro dentro do Formulario XPagamento mandar as informacoes pro caixa correto.

Lembro que toda vez que um caixa usar o formulario Xpagamento, apos se concretisar a macro do botao que esta em Xpagamento, este zera e fica disponivel para a proxima solicitacao de outro caixa.

Deu a entender agora meu problema Mauro Coutinho ?

Sei que podera me auxiliar. POis acho ser simples a soliucao somente nao estou ainda enxergando, ja que esta dando este erro de uma das imagens acima.

Andre

 
Postado : 16/01/2017 7:52 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

Achei algo parecido com o que preciso, so nao estou sabendo como adaptar em meu codigo ??

Preciso disso mesmo, ou seja, criar uma variavel Dim que eu possa usar de acordo com o caixa que estiver ativo no momento. Como dito anteriormente, uso nas propriedades do Formulario nos 5 caixas o ShowMode=False, sendo assim consigo manter todos os 5 caixas abertos.

Isso foi o que achei em : https://social.msdn.microsoft.com/Forum ... orum=vbapt

" Quando se trata de formulários, não é possível fazer algo simples como esse exemplo que mostrei (e nem como você fez). Isso acontece porque formulários devem ser declarados de acordo com sua classe. Se você possui os formulários Userform1, Userform2, Userform3, etc, não pode criar simplesmente uma variável que represente cada uma dessas classes. O melhor que acredito que possa fazer é: "

Sub Exemplo()
    Dim frm As Object
    Dim lIndex As Long
    
    For lIndex = 1 To 20
        Set frm = GetFormulário("UserForm" & lIndex)
        frm.Show
    Next lIndex
End Sub

Function GetFormulário(sFormulário As String) As Object
    Select Case sFormulário
        Case "UserForm1": Set GetFormulário = New UserForm1
        Case "UserForm2": Set GetFormulário = New UserForm1
        Case "UserForm3": Set GetFormulário = New UserForm1
        'E assim por diante
    End Select
End Function

Abaixo segue o inicio de minha Macro minha Macro

Private Sub btnOK1_Click()
    Application.ScreenUpdating = 0
Dim Valor As String
Dim Opt As String
Dim Myoption As String


  If Opt1.Value = True Then 'Dinheiro
  Myoption = "DINHEIRO"
  Troco.Show
   
  If TextBox3.Value <> "" Then
  Caixa2.Label_2.Caption = Format(TextBox3.Value, "R$ #,##0.00")
  End If
  
  GoTo Segue

restante do codigo ......

 
Postado : 17/01/2017 7:54 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

Qual erro aqui para estar apresentando a seguinte mensagem de erro ????

Qualificador Invalido

E para em cima da palavra Ativo.

Ja usei String, Integer .... e sempre o mesmo erro !

Private Sub btnOK1_Click()
    Application.ScreenUpdating = 0
Dim Valor As String
Dim Opt As String
Dim Myoption As String

Dim Ativo As Integer
Ativo = xPagamento.Caixa.Value


  If Opt1.Value = True Then 'Dinheiro
  Myoption = "DINHEIRO"
  Troco.Show
   
  If TextBox3.Value <> "" Then
  Ativo.Label_2.Caption = Format(TextBox3.Value, "R$ #,##0.00")
  End If
 
Postado : 17/01/2017 8:07 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

Se ainda tudo que postei ainda esta confuso, entao resumindo:

Preciso criar uma Variavel que seja igual ao nome dado a Useform, se for o caixa 1 ativo entao "Caixa1", se for o caixa 2 ativo entao "Caixa2"

Se na TextBox1.Value do Formulario XPagamento estiver escrito "Caixa1", entao ao clicar no botao de comando para executar a Macro, ao invés de eu digitar o comando abaixo que nao é reconhecido:

Dim Ativo As String
Ativo=XPagamento.TextBox1.Value

qual comando é o certo ?

Grato mesmo a quem puder me auxiliar.

Andre

 
Postado : 17/01/2017 8:36 pm
(@fazerbem)
Posts: 697
Honorable Member
Topic starter
 

Sei que poderei ter a ajuda de vcs, e sei que esperam ter uma planilha de teste.

Nunca fiquei aqui sem uma resposta e sei que poderei contar com mais esta ajuda !

Mando em anexo uma planilha que mostra meu problema.

Fiz um modelo igual funcionando dentro da planilha e sendo executada por uma Macro.

Fiz o mesmo acima porem dentro de 4 formularios, mas verao que está dando o erro.

Minha pergunta é: Porque a variavel funciona na planilha e nao quer funcionar no formulario ???

Onde estou errando ???

Poderiam corrigir o erro e me mandar a planilha anexa funcionando ?

Grato a todos e meu muito Obrigado !!!

André Luiz

 
Postado : 18/01/2017 8:13 pm
Página 1 / 2