Ir ao conteúdo
  • Cadastre-se

Excel Como salvar em planilha selecionada por combobox de um userform


Ir à solução Resolvido por Midori,

Posts recomendados

Boa noite! Preciso que me ajudem a corrigir esse erro. "Erro de tempo de execução 9, subscrito fora do intervalo.

Não consigo enxergar onde estar errado. Preciso que quando seja selecionado um determinado cartão no combobox, o cadastro seja salvo na aba onde está com o nome do cartão.

obs: Não quero que salve nem o valor nem a quantidade de parcelas. Vou colocar a planilha e a imagem do useform em anexo. a foto do useform colei na planilha.

 

Private Sub CB_Cartao_Change()
Dim x As Integer, n As Integer

 

x = Me.CB_Cartao.ListIndex + 3 '(3 É A POSIÇÃO DA PLANILHA)EX: AQUI A POSIÇAO 1 É A PLANILHA LEIA-ME
For n = 3 To Sheets.Count
    If Sheets(n).Index = x Then
    Sheets(n).Activate
Exit Sub
End If
Next n
End Sub

 

 

Private Sub salvar_Click()
Dim lin As Integer, n As Integer

With Sheets(n)                                                                   ' n é a varialvel que será definida quando for selecionada a aba na combobox(CB_Cartao)

lin = Range("B32" & Rows.Count).End(xlUp).Row + 1      ' PESQUISANDO A COLUNA DESEJADA PARA ENCONTRAR A PRIMEIRA LINHA VAZIA
    Cells(lin, 2) = Me.CAIXA_ID.Text
    Cells(lin, 3) = Me.CB_Cliente.Text
    Cells(lin, 4) = Me.TX_Data.Text
    Cells(lin, 5) = Me.CB_Cartao.Text
    Cells(lin, 6) = Me.TX_Compras.Text
    Cells(lin, 7) = Me.TX_Valor_Parcelas.Text

End With

End Sub

 

Private Sub UserForm_Initialize()

Me.CB_Cartao.RowSource = "VALIDAÇÃO!A2:A8"     'LISTA PARA COMBOBOX. NOME DA PLANILHA ONDE ESTÁ A LISTA E O INTERVALO
Me.CB_Cliente.RowSource = "VALIDAÇÃO!B2:B8"

End Sub

 

 

Obrigada!

Lucia Andrade

PLANILHA -CLUBE O HARDWARE .xlsx

Link para o comentário
Compartilhar em outros sites

15 horas atrás, Lucia Andrade disse:

Dim lin As Integer, n As Integer

With Sheets(n)   

O primeiro índice da planilha é 1.

 

Aí a variável n só foi declarada e como não recebeu nenhum valor passar zero como argumento.

 

Para evitar esse erro você pode testar antes se n é um índice válido.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Lucia Andrade Pode ser assim,

 

If n >= 1 And n <= Sheets.Count Then
    With Sheets(n)
        lin = .Range("B" & .Rows.Count).End(xlUp).Row + 1
    
        .Cells(lin, 2) = Me.CAIXA_ID.Text
        .Cells(lin, 3) = Me.CB_Cliente.Text
        .Cells(lin, 4) = Me.TX_Data.Text
        .Cells(lin, 5) = Me.CB_Cartao.Text
        .Cells(lin, 6) = Me.TX_Compras.Text
        .Cells(lin, 7) = Me.TX_Valor_Parcelas.Text
    End With
Else
    MsgBox "Índice inválido", vbExclamation
End If

 

Obs: Veja que coloquei o ponto antes dos ranges, já que usou a instrução With.

Link para o comentário
Compartilhar em outros sites

@Midori sou muito grata pela paciencia comigo, mas não deu certo eu já havia testado algo parecido.

Eu enviei a planilha e os códigos no início, na planilha tem imagem do modelo do userform que fiz, você testou nela? Deu certo? vou te enviar ela de novo. Se for possível espero que me ajude.

 

Na atribuição da linha seu range está "B32" e deve ser só "B", mesmo mudando para "B" não dar certo.

 

Agradecida

Lucia Andrade

PLANILHA -CLUBE O HARDWARE .xlsx

Link para o comentário
Compartilhar em outros sites

@Lucia Andrade O que não deu certo? A macro apresenta algum erro? Testei aqui e funcionou.

 

Cole o código no módulo para fazer o mesmo teste.

 

Os dados serão salvos na aba CARTÃO 3.

 

Private Sub Teste()
Dim lin As Integer, n As Integer

'If IsNumeric(CB_Cartao.Value) Then
    n = 5
'End If

If n >= 1 And n <= Sheets.Count Then
    With Sheets(n)
        lin = .Range("B" & .Rows.Count).End(xlUp).Row + 1
    
        .Cells(lin, 2) = "A" 'Me.CAIXA_ID.Text
        .Cells(lin, 3) = "B" 'Me.CB_Cliente.Text
        .Cells(lin, 4) = "C" 'Me.TX_Data.Text
        .Cells(lin, 5) = "D" 'Me.CB_Cartao.Text
        .Cells(lin, 6) = "E" 'Me.TX_Compras.Text
        .Cells(lin, 7) = "F" 'Me.TX_Valor_Parcelas.Text
    End With
Else
    MsgBox "Índice inválido", vbExclamation
End If

End Sub

 

Link para o comentário
Compartilhar em outros sites

@Lucia Andrade Por isso não consegue selecionar a planilha. Você criou a variável n do tipo Integer para receber o índice (valor numérico) e não o nome da planilha. Para o nome pode ser assim,

 

Private Sub salvar_Click()
    If Me.CB_Cartao.ListIndex >= 0 Then
        Dim Aba As Worksheet
        Dim Lin As Long
        
        Set Aba = Sheets(Me.CB_Cartao.Text)
        
        Lin = Aba.Range("B" & Aba.Rows.Count).End(xlUp).Row + 1
    
        Aba.Cells(Lin, 2) = Me.CAIXA_ID.Text
        Aba.Cells(Lin, 3) = Me.CB_Cliente.Text
        Aba.Cells(Lin, 4) = Me.TX_Data.Text
        Aba.Cells(Lin, 5) = Me.CB_Cartao.Text
        Aba.Cells(Lin, 6) = Me.TX_Compras.Text
        Aba.Cells(Lin, 7) = Me.TX_Valor_Parcelas.Text
    End If
End Sub

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!