Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Minha função não retorna oque eu espero (Vba)

Estou fazendo uma ficha eletronica onde tenho togglebuttons para a escolha do tamanho de jalecos cirurgicos onde uso a função para ler uma célula e dependedo do valor ele ativar um botão dentro de um formulário:

Function Fc_Tamanho_pijama(Tamanho As Integer, botao1, botao2, botao3, botao4, botao5, botao6, botao7, botao8, botao9, botao10, botao11, botao12 As Boolean)
    If Tamanho = "34" Then
        botao1 = True
    ElseIf Tamanho = "36" Then
        botao2 = True
    ElseIf Tamanho = "38" Then
        botao3 = True
    ElseIf Tamanho = "40" Then
        botao4 = True
    ElseIf Tamanho = "42" Then
        botao5 = True
    ElseIf Tamanho = "44" Then
        botao6 = True
    ElseIf Tamanho = "46" Then
        botao7 = True
    ElseIf Tamanho = "48" Then
        botao8 = True
    ElseIf Tamanho = "50" Then
        botao9 = True
    ElseIf Tamanho = "52" Then
        botao10 = True
    ElseIf Tamanho = "54" Then
        botao11 = True
    ElseIf Tamanho = "56" Then
        botao12 = True
    End If
End Function


Call Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, Frm_Ficha.FCP_tgl_C34.Value, Frm_Ficha.FCP_tgl_C36.Value, Frm_Ficha.FCP_tgl_C38.Value, Frm_Ficha.FCP_tgl_C40.Value, Frm_Ficha.FCP_tgl_C42.Value, Frm_Ficha.FCP_tgl_C44.Value, Frm_Ficha.FCP_tgl_C46.Value, Frm_Ficha.FCP_tgl_C48.Value, Frm_Ficha.FCP_tgl_C50.Value, Frm_Ficha.FCP_tgl_C52.Value, Frm_Ficha.FCP_tgl_C54.Value, Frm_Ficha.FCP_tgl_C56)

Ao depurar vejo que ele até troca o valor do botão corresponde para "True" porem ele não repassa isso para o "value" do togglebutton passado como referencia na função.

Preciso só saber onde estou errando nessa função :)

1 resposta
solução!

Olá Dalton, tudo bem? Espero que sim!

O problema que pode estar acontecendo é que as variáveis dos botões estão sendo alteradas somente dentro da função. Variáveis internas de funções não modificam o resultado de variáveis externas às funções, a menos que haja um retorno das mesmas.

Como não tenho acesso a sua planilha e não tenho conhecimento da estrutura completa do código, vou te dar uma possível solução. Você pode modificar a sua função para que receba dois parâmetros apenas: O tamanho do jaleco e o número do botão.

Os condicionais vão verificar o tamanho do jaleco e também o tamanho do botão, e irão retornar o valor da função como True caso os resultados sejam atendidos.

Por fim, você fará uma chamada da função para cada um dos botões, passando o valor do jaleco e número do botão correspondente.

Function Fc_Tamanho_pijama(Tamanho , Numero_Botao)
    If Tamanho = "34" And Numero_Botao = 1 Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "36" And Numero_Botao = 2  Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "38" And Numero_Botao = 3 Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "40" And Numero_Botao = 4 Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "42" And Numero_Botao = 5 Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "44" And Numero_Botao = 6 Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "46" And Numero_Botao = 7 Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "48" And Numero_Botao = 8 Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "50" And Numero_Botao = 9 Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "52" And Numero_Botao = 10 Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "54" And Numero_Botao = 11 Then
        Fc_Tamanho_pijama = True
    ElseIf Tamanho = "56" And Numero_Botao = 12 Then
        Fc_Tamanho_pijama = True
    End If
End Function

Sub executar()
Frm_Ficha.FCP_tgl_C34.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 1)
Frm_Ficha.FCP_tgl_C36.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 2)
Frm_Ficha.FCP_tgl_C38.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 3)
Frm_Ficha.FCP_tgl_C40.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 4)
Frm_Ficha.FCP_tgl_C42.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 5)
Frm_Ficha.FCP_tgl_C44.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 6)
Frm_Ficha.FCP_tgl_C46.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 7)
Frm_Ficha.FCP_tgl_C48.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 8)
Frm_Ficha.FCP_tgl_C50.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 9)
Frm_Ficha.FCP_tgl_C52.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 10)
Frm_Ficha.FCP_tgl_C54.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 11)
Frm_Ficha.FCP_tgl_C56.Value = Fc_Tamanho_pijama(Planilha1.Cells(ActiveCell.Row, 71).Value, 12)
End Sub

Caso não tenha conseguido solucionar o seu problema através desse código, estou à disposição para ajudar. Caso você não esteja usando dados sigilosos e possa compartilhar a planilha através de um link do Drive ou GitHub, será útil para que eu consiga te ajudar se ainda não tiver solucionado.