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

Erro em script de planilha para importação de dados


leocesar

Pergunta

Boa noite pessoal!

Estou tendo problemas com uma planilha que tem o objetivo de inserir dados de contas a pagar/receber (manualmente ou via Combo Box com lista suspensa na própria planilha) e depois exportá-lo para um arquivo txt que finalmente será importado em um sistema.

Tenho conhecimento básico em VBA e embora o código esteja possivelmente sujo, as macros estão funcionando corretamente (o objetivo principal do projeto está sendo atendido) com exceção da parte final do código.

Coloquei detalhado as dúvidas como comentário no código e conto com o conhecimento e apoio dos Srs. para me auxiliarem neste projeto.

 

Segue:

 

Sub TempCombo_Change() '(ByVal Target As Range)

       
Dim rng As Range
Set rng = Range("D6:D106") 'Se colocar D:D vai até à última linha

For Each Row In rng.Rows


    '(/abre dúvida)-------------------------------------------------------------------------------------
    
    '   Inseri uma TempCombo na Sheet ("Planilha") e coloquei um atalho para chamar a macro lsChamarAutoPreencher()
    '   O atalho é (Ctrl+A)
    
    '   A intenção aqui é que nas células D6:D106 da Sheet ("Planilha") o usuário possa selecionar um Fornecedor
    '   dentre os previamente cadastrados (ele pode fazer isso digitando o nome, ou buscando na TempCombo, acionando
    '   a TempCombo através do atalho (Ctrl+A).
    
    '   Se durante a digitação ou ao buscar na TempCombo o usuário não achar um fornecedor previamente cadastrado,
    '   ele irá cadastrar um novo, digitando ou selecionando na TempCombo o valor "Z-NOVO FORNECEDOR"


    '   Daí gostaria que ao digitar 'OU' selecionar na TempCombo o valor "Z-NOVO FORNECEDOR", o VBA executasse
    '   o código abaixo:
    
If Row.Value = "Z-NOVO FORNECEDOR" Or TempCombo.Value = "Z-NOVO FORNECEDOR" Then


Novo:
    
    Dim novo_fornecedor As String
    
    novo_fornecedor = InputBox("Digite o nome do novo FORNECEDOR conforme cadastrado no sistema", "Novo FORNECEDOR", "Digite aqui")
    
    '   aqui gostaria de colocar uma validação na InputBox para aceitar só caracteres em MAÍSCULA e apresentar uma
    '   MsgBox de erro, informando ao usuário para corrigir se ele digitar em minúscula
    
Sair = InputBox("Está correto:?" & Chr(13) & _
novo_fornecedor, "Lembrete", "Digite SIM se está conforme cadastrado no sistema.")

    If Sair = "SIM" Then
     
    Application.ScreenUpdating = False
    ActiveCell.Value = novo_fornecedor
    ActiveCell.Copy
    
    '   aqui peço ao VBA para copiar conteúdo digitado dentro da InputBox
    '   e colar na Sheet ("Fornecedores") conforme continuação do código abaixo:
   

    Application.Goto ActiveWorkbook.Sheets("Fornecedores").Range("A1")
    Selection.End(xlDown).Select
    ActiveCell.Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    
    '   Ao copiar o conteúdo da ActiveCell da Sheet ("Planilha") e colar na primeira linha em branco
    '   da coluna A, dentro Sheet ("Fornecedores") o VBA vai chamar a Macro1() daquela Sheet pois este
    ' código irá alterar o conteúdo da coluna A e a Macro1() vai reorganizar os dados em ordem alfabética
    
    
    '   Meu maior problema com este código é que neste final, ocorrem três problemas:
    '
    '   1) A planilha fica em Loop, levando sempre para GoTo Novo, sendo que minha inteção era que o
    '      código Goto Novo fosse acionado apenas se a InputBox Sair fosse diferente de "SIM"
    '
    '   2) O conteúdo digitado na InputBox novo_fornecedor é copiado corretamente para a Sheet ("Fornecedores") e o
    '   código da macro1() daquela Sheet é executado corretamente, reordenando a coluna "A" da Sheet ("Fornecedores")
    '   em ordem alfabética porém, este conteúdo que eu digito na InputBox novo_fornecedor da Sheet ("Planilha")
    '   não está ficando gravado na célula ativa em que a InputBox novo_fornecedor está
    '
    '   3) Ao final do código, se todas as sentenças forem atendidas corretamente, gostaria que ao final do código
    '   o VBA gravasse o conteúdo da InputBox novo_fornecedor na célula ativa e movesse o cursor para a primeira
    '   célula à direita desta célula ativa (estando em branco ou não)
    
    End If
    Exit Sub
    
    Else
    GoTo Novo
    
    End If
    
    

Next Row

    '(/fecha dúvida)-------------------------------------------------------------------------------------

End Sub

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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,5k
×
×
  • Criar Novo...