VBA - Formulário - CheckBox
Enviado: 27 Nov 2018 às 14:44
Boa Tarde,
Estou desenvolvendo um formulário e gostaria que as respostas desse formulário fosse registrado em uma tabela. Estou tendo problema pois se a pessoa marcar duas ou mais checkbox's da mesma coluna(perguta do formulário), ele so registra na tabela a ultima marcada.
gostaria que caso haja mais de uma resposta na mesma coluna(pergunta do formulário), ele registrasse todas na mesma coluna da tabela porem em linhas diferentes.
segue o código até o momento:
'Identifica o tipo do objeto e insere se for um dos tipos definidos
Private Sub lsInserir(ByRef lTextBox As Variant, ByVal lSheet As String, ByVal lColunaCodigo As Long, ByVal lUltimaLinha As Long)
If (TypeOf lTextBox Is MSForms.TextBox) Or (TypeOf lTextBox Is MSForms.ComboBox) Then
Sheets(lSheet).Range(lTextBox.Tag & lUltimaLinha).Value = lTextBox.Text
Else
If TypeOf lTextBox Is MSForms.CheckBox Then
If lTextBox.Value = True Then
Sheets(lSheet).Range(lTextBox.Tag & lUltimaLinha).Value = lTextBox.Caption
End If
End If
End If
End Sub
'Loop por todos os componentes da tela
'formulario = Nome do UserForm atual
'lSheet = Nome da planilha aonde irão ser inseridos os valores
'lColunaCodigo = Coluna de referência para a inserção dos dados
Public Function lsInserirTextBox(Formulario As UserForm, ByVal lSheet As String, ByVal lColunaCodigo As Long)
Dim controle As Control
Dim lUltimaLinhaAtiva As Long
lUltimaLinhaAtiva = Worksheets(lSheet).Cells(Worksheets(lSheet).Rows.Count, lColunaCodigo).End(xlUp).Row + 1
For Each controle In Formulario.Controls
lsInserir controle, lSheet, lColunaCodigo, lUltimaLinhaAtiva
Next
End Function
'Limpa todos os objetos TextBox da tela
Public Function lsLimparTextBox(Formulario As UserForm)
Dim controle As Control
For Each controle In Formulario.Controls
If TypeOf controle Is MSForms.TextBox Then
controle.Text = ""
End If
Next
End Function
'Aciona o botão de limpar
Private Sub CommandButton1_Click()
lsLimparTextBox frmCadastro
TextBox1.SetFocus
End Sub
'Aciona o botão de inserir
Private Sub CommandButton2_Click()
lsInserirTextBox frmCadastro, "Cadastro", 1
lsLimparTextBox frmCadastro
TextBox1.SetFocus
End Sub
Private Sub UserForm_Click()
End Sub
________________
Exemplo
teve interferencia | choveu | cruzou com W |
checkbox ------checkbox------checkbox
checkbox ------checkbox------checkbox
checkbox------ checkbox------checkbox
checkbox------checkbox------checkbox
caso o usuario marque todas a checkbox por exemplo, quero que saia na tabela do excel assim:
A ------------------B ------------------ C
capition ------capition------ capition
capition ------capition----- capition
capition------ capition------ capition
capition------ capition ------ capition
caso o usuario marque as duas primeiras da primeira coluna e as duas ultimas da terceira coluna, ficaria:
A ------------------B ------------------ C
capition ---------(vazio)-------- capition
capition ---------(vazio)-------- capition
Estou desenvolvendo um formulário e gostaria que as respostas desse formulário fosse registrado em uma tabela. Estou tendo problema pois se a pessoa marcar duas ou mais checkbox's da mesma coluna(perguta do formulário), ele so registra na tabela a ultima marcada.
gostaria que caso haja mais de uma resposta na mesma coluna(pergunta do formulário), ele registrasse todas na mesma coluna da tabela porem em linhas diferentes.
segue o código até o momento:
'Identifica o tipo do objeto e insere se for um dos tipos definidos
Private Sub lsInserir(ByRef lTextBox As Variant, ByVal lSheet As String, ByVal lColunaCodigo As Long, ByVal lUltimaLinha As Long)
If (TypeOf lTextBox Is MSForms.TextBox) Or (TypeOf lTextBox Is MSForms.ComboBox) Then
Sheets(lSheet).Range(lTextBox.Tag & lUltimaLinha).Value = lTextBox.Text
Else
If TypeOf lTextBox Is MSForms.CheckBox Then
If lTextBox.Value = True Then
Sheets(lSheet).Range(lTextBox.Tag & lUltimaLinha).Value = lTextBox.Caption
End If
End If
End If
End Sub
'Loop por todos os componentes da tela
'formulario = Nome do UserForm atual
'lSheet = Nome da planilha aonde irão ser inseridos os valores
'lColunaCodigo = Coluna de referência para a inserção dos dados
Public Function lsInserirTextBox(Formulario As UserForm, ByVal lSheet As String, ByVal lColunaCodigo As Long)
Dim controle As Control
Dim lUltimaLinhaAtiva As Long
lUltimaLinhaAtiva = Worksheets(lSheet).Cells(Worksheets(lSheet).Rows.Count, lColunaCodigo).End(xlUp).Row + 1
For Each controle In Formulario.Controls
lsInserir controle, lSheet, lColunaCodigo, lUltimaLinhaAtiva
Next
End Function
'Limpa todos os objetos TextBox da tela
Public Function lsLimparTextBox(Formulario As UserForm)
Dim controle As Control
For Each controle In Formulario.Controls
If TypeOf controle Is MSForms.TextBox Then
controle.Text = ""
End If
Next
End Function
'Aciona o botão de limpar
Private Sub CommandButton1_Click()
lsLimparTextBox frmCadastro
TextBox1.SetFocus
End Sub
'Aciona o botão de inserir
Private Sub CommandButton2_Click()
lsInserirTextBox frmCadastro, "Cadastro", 1
lsLimparTextBox frmCadastro
TextBox1.SetFocus
End Sub
Private Sub UserForm_Click()
End Sub
________________
Exemplo
teve interferencia | choveu | cruzou com W |
checkbox ------checkbox------checkbox
checkbox ------checkbox------checkbox
checkbox------ checkbox------checkbox
checkbox------checkbox------checkbox
caso o usuario marque todas a checkbox por exemplo, quero que saia na tabela do excel assim:
A ------------------B ------------------ C
capition ------capition------ capition
capition ------capition----- capition
capition------ capition------ capition
capition------ capition ------ capition
caso o usuario marque as duas primeiras da primeira coluna e as duas ultimas da terceira coluna, ficaria:
A ------------------B ------------------ C
capition ---------(vazio)-------- capition
capition ---------(vazio)-------- capition